andey
发布时间:2024-3-11 22:44
概述嵌入式MCU开发中Free-RTOS是个使用比较常用的系统,,freertos 的内核文件相对很少,而且官方的代码下已经支持了CORTEX-M0+架构,我们基本不用修改什么就能把官方的代码适配到STM32C0的板子上。 我们先简答看下freertos的代码目录结构(芯片架构相关的我们只关注IAR cortex-m0):
从上面的代码目录树看代码代码量还是不到的,一共需要的.c .s 文件一共10个文件左右,因为操作系统依赖的portable相关的代码官方的代码结构里已经有了,理论上把这些文件组织到工程内部编译通过操作系统就移植完成了。 MemMang 目录下freertos 创建任务及资源需要动态malloc 内存,需要支持内存管理的接口,根据实际的情况选择一个就行,本次移植使用的是heap_4.c文件。
解决上述编译问题后基本代码适配已经完成,根据对应的错误解决编译问题即可,系统编译完后成后,我们添加shell任务用于和系统进行交互,shell的移植可以查看此链接【STM32MP135-DK】裸机移植shell main函数添加测试代码创建shell 任务:
添加shell 任务后板卡验证运行:
从上面的log 可知shell 任务调度运行正常。 移植适配遇到的问题问题1: stm32 的HAL库接管了systick,freertos的任务调度也会使用systick造成了这部分的耦合,存在冲突需要解决这部分的耦合 修改办法: 问了解决耦合问题,systick的中断统一由freertos管理,对HAL库使用的systick相关接口定义的是weak类型可以进行overwrite 覆盖对应代码如下:
问题2: 移植后会进入hardfault,对应死机现场如下:
查看对应的死机现场发现在main函数入口打印信息的时候进入了systick中断,这时调度器还没初始化成功,错误的触发了任务调度触发死机,原因为进入main函数时总中断开关是开启的,从而触发错误的相应了中断。 修改方法: 进入main函数时关闭总中断,总中断的开启时机交给调度器去控制,从而避免上述问题,因为适配使用的IAR使用了IAR 内置函数关闭中断对应修改代码如下 |
F429I-DISC1体验报告(3) 画板线条绘制和调色功能的实现丨国庆开发板测评活动
F429I-DISC1体验报告(2) 按钮和弹窗GUI的简单交互设计丨国庆开发板测评活动
F429I-DISC1体验报告(1)久经沙场,锋芒依旧丨TouchGFX开发F429丨国庆开发板测评活动
【NUCLEO-WBA65RI评测】物联网 LED
【NUCLEO-WBA65RI评测】蓝牙体温计
【NUCLEO-WBA65RI评测】Home Assistant 物联网心率计
【STM32N6570-DK评测】2.最简点灯
【STM32N6570-DK评测】1.你好N6
【P-NUCLEO-53L8A1评测】不同距离和光强的测试
STM32N6坛友评测出炉,来围观(第二波预约继续)
微信公众号
手机版