STM32 uCOS-III GCC移植说明


1. 修改ST的内核文件

参考https://blog.csdn.net/chuancey_cc/article/details/78474001 第四节

2. 替换启动文件

参考https://blog.csdn.net/chuancey_cc/article/details/78474001 第五节

3. 添加链接脚本

参考https://blog.csdn.net/chuancey_cc/article/details/78474001 第六节

4. 添加GCC汇编文件

uCOS-III源文件中的汇编代码,全部选择GNU目录下的文件,主要包括:

uC-CPU/ARM-Cortex-M3/GNU/cpu_a.s

uC-LIB/Ports/ARM-Cortex-M3/GNU/lib_mem_a.s

uCOS-III/Ports/ARM-Cortex-M3/Generic/GNU/os_cpu_a.s

将其添加到ucos-iii.mk中。

5. 汇编文件的修改

需要的修改的汇编文件为uCOS-III/Ports/ARM-Cortex-M3/Generic/GNU/os_cpu_a.s

cortex-m3内核通过PendSV触发任务调度,而所有的系统异常和中断的向量入口地址已经在启动文件中做了定义,PendSV的入口地址名称为PendSV_Handler,即该异常的处理函数名称必须为PendSV_Handler,而uCOS-III的os_cpu_a.s中将PendSV的汇编处理函数名称定义为OS_CPU_PendSVHandler,在产生PendSV异常后,系统找不到启动文件为其定义的PendSV_Handler入口函数,OSStart()执行后,系统会死在OSStartHang中,无法实现任务调度。必须将其名称更改为PendSV_Handler,最好也将对应头文件中的函数声明也做同样的修改。

其实,PendSV_Handlerstm32f10x_it.c中已经定义了,需要将stm32f10x_it.c中的实现屏蔽掉,防止编译报错。

为什么不保留os_cpu_a.s中的OS_CPU_PendSVHandler,去更改stm32f10x_it.c中的PendSV_Handler的实现呢?因为任务调度必须要速度很快,最好用汇编实现。

不止是PendSV,SysTick的异常入口地址在启动文件中定义为SysTick_Handler,而uCOS-III的os_cpu_c.c中将SysTick的处理函数名称定义为OS_CPU_SysTickHandler,在产生SysTick异常后,系统找不到启动文件为其定义的SysTick_Handler入口函数。

这个更改有两种方式:

(1) 保留os_cpu_c.c中的OS_CPU_SysTickHandler函数,将其函数实现拷贝到stm32f10x_it.c中的SysTick_Handler函数里。

(2) 将os_cpu_c.c中的OS_CPU_SysTickHandler函数更名为SysTick_Handler,将stm32f10x_it.c中的SysTick_Handler函数屏蔽掉。

我习惯采用第一种方式。

针对第5点,还有一种是实现方式,就是把启动文件的两个异常入口地址更改为:OS_CPU_PendSVHandlerOS_CPU_SysTickHandler

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Brian.Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值