打印
[STM32F0]

STM32F0系列芯片运行OS

[复制链接]
491|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-5-28 11:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近买了一块开发板,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

使用特权

评论回复
沙发
kepe| | 2024-7-31 01:03 | 只看该作者
使用调试工具(如STM32CubeIDE的调试功能)来检查任务栈的使用情况和中断优先级的设置,可以帮助你快速定位问题并进行调整。

使用特权

评论回复
板凳
AdaMaYun| | 2024-7-31 19:04 | 只看该作者
cubeide生成了一个带freertos的工程很方便

使用特权

评论回复
地板
4c1l| | 2024-8-31 22:54 | 只看该作者
当从 Cortex-M3 移植到 Cortex-M0 时,因为它们在指令集和特性上有所不同。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1923

主题

15596

帖子

11

粉丝