UCOSII在STM32F103移植

系统平台:μC/OS-II(最新V2.92版)
硬件平台:STM32F1(适合F1所以系列)
开发平台:Keil(MDK-ARM) V5
Ucos软件包
Micrium官网下载地址(需要账号):
https://www.micrium.com/download/micrium_stm32f107_ucos-ii
1、相关文件夹说明

EvalBoards:主要是配置底层和系统的相关文件。我们只需要部分。
uC-CPU:CPU相关文件,我们使用的STM库,不需要。
uC-LIB:Micrium官方的库,初学者这里也不使用。
uCOS-II:这个文件才是主要,我们移植的文件主要都在这里。

2、提取EvalBoards和uCOS-II下文件.
在这里插入图片描述

app_cfg.h:应用配置的文件(如:任务优先级、堆栈大小等)(可直接重新定义根据任务配置)。
os_cfg.:是系统配置的文件(使能相应功能函数,也就是所谓的裁剪系统)。
将这两个文件提取至我们自己新建工程App文件夹下。
Ports是系统相关的端口配置文件。
Source是OS的全部文件。
两个都全部拷贝到工程目录下

3、新建项目工程,可以根据这篇文章了创建或者用库文件
(不要忘记包含路径要加入uCOS-II文件夹,不然会导致文件找不到)
添加ucos文件以后,还需要创建一些与任务相关的文件夹(app_cfg.c、 app_task.c、 app_task.h等)

4、ucos移植配置相关文件
stm32f10x.h配置(在MDK软件下,不在项目中,也可以复制过来)
取消第68行STM32F10X_MD的注释,这样的话可以启动代码匹配startup_stm32f10x_hd.s。
使用标准外设库:取消第108行USE_STDPERIPH_DRIVER的注释,使用标准外设库,我们使用stm32f10x_conf.h文件来配置使用到的外设库。

app_cfg.h:这里主要是配置应用头文件,我们可以不用,我们重新写,按照自己创建的任务来确定任务优先级、任务堆栈大小和任务堆栈变量。
app_cfg.c :系统滴答配置
在这里插入图片描述

Stm32f10x_it.c:系统滴答,调用os函数
在这里插入图片描述

裁剪系统(配置os_cfg.h)
我们常说的系统裁剪就是在对应的宏定义上对某些功能开关使得对应功能使能和失能。
1.最低优先级OS_LOWEST_PRIO
这个与我们配置任务优先级有关系,最低优先级任务配置的最大值。我们所说的任务优先级关系是:优先级越小,数值越大; 相反,优先级越大,数值越小。
位于os_cfg.h文件第39行:
#define OS_LOWEST_PRIO 63

2.系统每秒滴答数OS_TICKS_PER_SEC
这个宏定义的意思就是说,系统每秒钟滴答多少次,它与系统延时(OSTimeDly)关系比较重要,我们的例子中OS_TICKS_PER_SEC等于100,调用OSTimeDly(100);相当于的延时100个滴答,即延时1秒的意思。
位于os_cfg.h文件第51行:
#define OS_TICKS_PER_SEC 100

3.任务堆栈大小OS_TASK_xxx_STK_SIZE
这个几个宏定义在使用相应功能的时候有用,如果RAM资源有限,这个任务堆栈的大小最好根据任务来评估一下,资源有限时不要太大,当然也不能小于程序正常运行。
位于os_cfg.h文件第55 - 57行:
#define OS_TASK_TMR_STK_SIZE 128
#define OS_TASK_STAT_STK_SIZE 128
#define OS_TASK_IDLE_STK_SIZE 128

os_cpu_a.asm:该文件开头是对全部变量、外部变量和函数进行声明
将OS_CPU_PendSVHandler改为PendSV_Handler,为了兼容ST标准外设库启动代码(startup_stm32f10x_hd.s)42行和209行两处

os_cpu_c.c
系统滴答函数我们使用的STM库的函数,所以ucos里面的函数需要注释
44#if0 56#endif
352 #if 0 402 #endif(宏定义让中间的失效)
在这里插入图片描述

os_cpu.h
之前os_cpu_a.asm和os_cpu_c.c注释掉的函数,这里面声明注释三个函数

最后oc_cfg.h(参数配置,最后配置一样,完全研究懂还需琢磨)
在这里插入图片描述

接下来就是最头疼的调bug了。
1、Error[Pe020]:identifier"OS_TASK_TMR_PRIO"isundefined \OS_uCOS_II\core\os_tmr.c 890
解决措施:
原来是置位了OS_TMR_EN。在OS_cfg.h中将OS_TMR_EN置为0就OK了。
2、include.c和stm32f10x_it.c没有发现。这两个分别是引用头文件和中断处理文件,没有太多实质性的代码,主要格式。可以根据缺失的头文件来自己引用,中断可以自己新建,或者在其他32项目复制过来,删除不要的代码就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值