1 移植FreeRTOS
- STM32CubeIDE已经把FreeRTOS深度整合到了自家的系统中去了,所以移植FreeRTOS变得非常方便,
但是笔者在移植过程中,依然遇到各种问题,后面会呈现如何解决的。其中重要的几个文件如下:
- tasks.c: 任务相关的代码
- list.c: 一个双向链表的代码
- queue.c: 队列用于任务间通讯的代码
- croutine.c: 多任务调度的代码
- event_groups.c:事件标志组的代码
- time.c : 内部实现的一个软件定时器的代码
通常来说,在一个FreeRTOS的项目中,tasks.c和list.c与queue.c是必须要的,其它的文件是可选的。
1.1 CMSIS v1 VS v2
- CMSIS RTOS是ARM公司设计的对操作系统的一个抽象封装。它提供了一种标准化的API接口让开发者可以调用嵌入式操作系统的功能而不必理会底层到底采用的是哪种操作系统。举个通俗的例子,比如读者想尝试其它的操作系统如鸿蒙LiteOS等又害怕移植会很花精力,如果LiteOS支持CMSIS-RTOS接口的话,读者基本可以不做修改就可以直接运行了,因为CMSIS RTOS API接口会负责调用系统的相关功能。(当然目前STM32CubeIDE只有针对FreeRTOS的直接选项)
- CMSIS RTOS v1是为基于Cortex-M内核的单片机设计的。CMSIS RTOS v2是CMSIS RTOS v1的扩展添加了对适用于Armv8-M内核和多核芯片的操作系统的支持。
2 依赖文件引入
2.1 可视化配置
- SYS
- RCC
- FreeRTOS
- GPIO
2.2 依赖引入
3 移植错误分析
- 删掉,重复定义
4 多任务设置(串口+LED闪烁)
- main.c
- freertos.c
- gpio.h
- uart.h
- uart.c
4 测试结果
- LED闪烁任务
- 串口任务