最近买了一块开发板,STM32F103,关于OS移植的案例网上也很多,现在的STM32cube也能直接配置freertos,但是总感觉拿来主义不太好,还是学学OS的内核吧。
其实之前我并未接触过rtos,大概花了一周的时间看了ucosii,了解基本思想,跟着网上的教程,搭了一个简易的OS,确实没什么问题,在M3的内核上稳定运行,包含了抢占式调度。之后就想移植到M0的内核上看看,正好手上还有STM32F0的资源。
工作内容
1.用STM32CBUE生成基础工程;
2.中断优先级的配置,包含systick和pendsv中断优先级;
3.任务栈及任务控制块的建立;
4.pendsv_handle函数,包含上下文切换;(汇编)
5.systick_handle函数,包含任务选择;(部分汇编)
6.抢占式调度;
7.队列传输;
注意事项
具体的代码就不粘贴了,网上很多,简单讲讲遇到的几个坑吧
1.中断优先级配置,用的还是cortex M3的方式,汇编写的,实际调试的时候发现OS能跑起来,但是主堆栈一小会就溢出了,里面填了一些任务栈里面的内容,逐步定位到中断的问题。看了一下PendSV和Systick中断优先级根本没有配置上,后面用的是库函数的方式实现的配置,问题就解决了。
2.上下文切换的时候会用到汇编函数,因为M0用的是16位的thumb指令集,M3用的是32位的ARM指令集,有些汇编指令不一样,为了省事,我是先用cubeide生成了一个带freertos的工程,然后抄了一部分内容。
3.直接用LED工程的,注意delay函数,因为它也会重置计数器。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/kxh115136/article/details/139199132
|