现在的位置: 首页 > 综合 > 正文

stm32移植ucosIII

2018年12月17日 ⁄ 综合 ⁄ 共 3478字 ⁄ 字号 评论关闭

 

工作很久了,一直在用ucosIII,以前移植过ucosII,也看过别人写的教程移植过ucosIII,但是一直想自己移植一下ucosIII,然后把自己的移植体会写出来.供大家一起学习.

移植环境:iar6.0, stm32lib_v3.5, ucosIII.

 

获取stm32库文件v3.5.地址http://448251593.qjwm.com/down_6273773.html   

获取ucosIII的源码地址http://448251593.qjwm.com/down_6273751.html   

当然如果你有这些源码就不用下载了.

这是一个.exe的文件.需要运行解压到指定的目录.(我解压到C,默认),如下图:

二、建立一个最简单的gpio工程

D(可按需)建立一个stm32_ucosIII的目录,然后在其里面建立一个App目录 ,STM32  v3.5固件库…\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\GPIO\IOToggle下面的文件都拷贝到App下面

然后把stm32的库拷贝到stm32_ucosIII目录

打开IAR软件Project->Create New Project

然后按照下图建立分组

然后添加源文件如下图

 

下面就是设置IAR工程参数了

这里可能会出现错误这个错误说的是没有指定一款芯片

双击错误定位到错误的位置,然后找到第65.你会发现有芯片定义但是全部是注释状态根据你的芯片的容量打开一个注释.

在编译一次OK.一个错误都没有.进入main.c文件主函数吧里面的内容都删除掉,只剩下一个while(1),以备后面移植ucosIII使用

先把systick这个内核定时器配置好吧.这个是ucos的心跳.我们在main函数里面加上两句程序用于初始化systick.systick定时具体的寄存器请参照stm32 的数据手册

   SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);

    SysTick_Config(9000);/*配置systick周期1ms*/

 

打开stm32f10x_it.c文件的139行在里面添加几条空语句,设置一个断点.仿真运行看systick是否工作

运行效果如下图

 

三、移植ucosIII

现在我们开始正式移植ucosIII,打开我们的工程目录,按照下图操作,

然后把源码包里面的BSP目录下面的bsp.cbsp.h两个文件copy到我们新建的Bsp目录下

现在源文件都搞定了.就差添加到工程里面了,回到IAR建立相应分组具体看下图

 

然后添加文件

添加完所有的文件,然后打开IAR工程选项设置路径,以下是新增加的文件夹路径

$PROJ_DIR$\Bsp

$PROJ_DIR$\uC-CPU

$PROJ_DIR$\uC-CPU\Cfg\Template

$PROJ_DIR$\uC-CPU\ARM-Cortex-M3\IAR

$PROJ_DIR$\uC-LIB

$PROJ_DIR$\uC-LIB\Cfg\Template

$PROJ_DIR$\uCOS-III\Cfg\Template

$PROJ_DIR$\uCOS-III\Ports\ARM-Cortex-M3\Generic\IAR

$PROJ_DIR$\uCOS-III\Source

现在开始修改文件,进入bsp.c文件163,BSP_Init()函数内容都删除掉

然后在头文件的位置加入#include "stm32f10x.h"

进入stm32f10x_it.c文件130行把PendSV_Handler()函数屏蔽掉139行把SysTick_Handler()函数也屏蔽掉

接下来进入os_cpu_c.c文件355行把函数名修改为SysTick_Handler

然后进入os_cpu.h文件133行两个函数名修改

void  PendSV_Handler (void);
void  SysTick_Handler(void);

接下来进入os_cpu_a.asm文件38行和133改为PendSV_Handler

至此移植算是告一段落.编译一下.

会出现错误提示不能打开头文件

这个是app应用层的的所以我们双击错误定位到错误位置把这句删除即可

错误时不能打开os_type.h文件所以我们去ucosIII的源码目录下找到这个文件拷贝到我们的工程目录下的App

进入cpu_cfg.h文件99.改为DEF_ENABLED

移除lib_mem_a.asm文件

接下来再次编译此时只剩下2个警告.

四、测试OS

打开main.c文件

24行添加

#include "os.h"

37行添加

CPU_STK  AppTaskStk[128];

OS_TCB   AppTaskTCB;

void     AppTask(void *p_arg);

main()函数添加

OS_ERR  err;

    CPU_IntDis();

    SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);/*配置systick的时钟源为hclk8分频*/

    SysTick_Config(9000);                                /*配置systick的时钟周期1ms*/

    OSInit(&err);                                        /*初始化OS*/

    OSTaskCreate((OS_TCB     *)&AppTaskTCB,              /* Create the  task    */

                 (CPU_CHAR   *)"App Task",

                 (OS_TASK_PTR )AppTask, 

                 (void       *)0,

                 (OS_PRIO     )12,

                 (CPU_STK    *)&AppTaskStk[0],

                 (CPU_STK_SIZE)128/10,

                 (CPU_STK_SIZE)128,

                 (OS_MSG_QTY  )0,

                 (OS_TICK     )0,

                 (void       *)0,

                 (OS_OPT      )OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR,

                 (OS_ERR     *)&err);

    OSStart(&err);                                       /*启动OS*/

然后在加入任务函数原形

/**

  * @brief  Main program.

  * @param  None

  * @retval None

  */

void  AppTask(void *p_arg)

{

    OS_ERR  err;

    static char t = 0;

    while(1)

    {

        if (t)

        {

            t = 0;

            asm("nop");

            OSTimeDly(200, OS_OPT_TIME_DLY, &err);

        }  

        else            

        {

            t = 1;

            asm("nop");

            asm("nop");

            asm("nop");

            OSTimeDly(100, OS_OPT_TIME_DLY, &err); 

        }     

    }

}

以上便完成了ucosIII的移植具体可以下载word文档.图片好多上传很费劲

http://448251593.qjwm.com/down_6290643.html

抱歉!评论已关闭.