1. FreeRTOS配置文件
FreeRTOSConfig.h配置文件作用:对FreeRTOS进行功能配置和裁剪,以及API函数使能,文件中的宏大致可分为三类:
- INCLUDE:配置FreeRTOS中的可选API函数
- config:完成FreeRTOS的功能配置和裁剪
- 其他配置项:中断库函数PendSV宏定义、SVC宏定义,与port.c有关
关于文件中各个宏的意义可以在官网中查看。
2. FreeRTOS移植
FreeRTOS就是一个软件库,在你写工程时提供一些好用的接口。FreeRTOS中存在一些配置会与HAL库冲突,如果工程中同时需要这两个库,则FreeRTOS移植过程中需要将这些冲突点解决才能成功编译工程。
2.1 移植过程
- 添加FreeRTOS源码:在工程中建立FreeRTOS文件夹,将源码中Source文件夹下的文件添加到该文件夹下。
需要注意heap_x.c和port.c文件:
- heap_x.c为FreeRTOS提供的内存管理算法,x表示对应5中算法中的一种。
- port.c文件是FreeRTOS与MCU连接的桥梁,可以进入portable/RVDS文件下看到各种不同的port.c,选择匹配的加入工程即可,可以理解为驱动。
- 添加FreeRTOSConfig.h:可以从FreeRTOS内的演示工程中获取相关机型的配置文件,不过不一定适用。
- 修改中断相关文件(冲突点)
在FreeRTOS的移植过程中会用到三个重要的中断,分别是FreeRTOS系统时基定时器的中断(Systick中断)、SVC中断、PendSV中断,这三个中断的中断服务函数在HAL库提供的文件中都有定义,因此需要将HAL库提供的这三个中断服务函数注释掉。
- 添加应用程序,实现功能
2.2 注意
FreeRTOSConfig.h文件中有如下定义:
#define configPRIO_BITS __NVIC_PRIO_BITS
其中__NVIC_PRIO_BITS
在HAL库中有相关定义,一般被定义为:
#define __NVIC_PRIO_BITS 4U
这个值是正确的,但是如果将__NVIC_PRIO_BITS
定义成 4U 的话,在编译 FreeRTOS 工
程的时候,Keil 会报错,具体的解决方法就是将 4U 改成 4,代码修改后如下所示:
#define __NVIC_PRIO_BITS 4