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 内置函数关闭中断对应修改代码如下 |
【STM32H5 评测】基础硬件加密与随机数性能 - STM32H5E5实测硬件AES加解密、HASH运算、TRNG真随机数输出速率与稳定性
【STM32H5 评测】内存读写性能 - STM32H5E5实测Flash,SRAM读写速度,用DMA搬运大块数据
【STM32H5 评测】CPU核心性能 - STM32H5E5跑 RTOS,观察任务切换速度、中断响应快慢
使用stm32C542做的低功耗密码锁示例
【STM32U3评测】使用INS5699 RTC模组
【评测汇总】STM32U3 系列开发板评测全汇总 | 吃透新品核心性能与实战场景
我中奖啦,这敢想象吗😁😄😄
【STM32U3评测】低功耗模式功耗测量
【STM32U3评测】并不优雅的点亮WS2812
【STM32U3评测】移植RTOS
微信公众号
手机版