目录
(1) 删除适用于 µC/OS 但不适用于 FreeRTOS 的相关代码
移植前准备
在开始移植 FreeRTOS 之前,需要提前准备好一个用于移植 FreeRTOS 的基础工程,和FreeRTOS 的源码
1. 基础工程
由于本文的后续一些实验当中需要用到 LED、 LCD、定时器、串口、内存管理等外设及功能,因此就以正点原子标准例程-HAL 库版本的内存管理的实验工程为基础工程进行 FreeRTOS的移植。由于内存管理实验例程的 BSP 文件夹中可能不包含定时器的驱动文件,因此如果内存管理试验力撑的 BSP 文件夹如果不包含 TIMER 文件夹的话,需要从定时器相关实验的 BSP 文件夹中拷贝一份 TIMER 到 FreeRTOS 移植基础工程当中。
2. FreeRTOS 源码
本教程所使用的 FreeRTOS 内核源码的版本 V10.4.6,即 FreeRTOS v202112.00。 在第一章中已经详细的介绍了如何从 FreeRTOS 的官网获取 FreeRTOS 的源码,同样的,开发板资料盘中也提供了本教程所使用的 FreeRTOS 源码,即 FreeRTOS v202112.00(FreeRTOS 内核 V10.4.6),路径为:软件资料→FreeRTOS 学习资料→FreeRTOSv202112.00.zip。
添加 FreeRTOS 文件
在准备好基础工程和 FreeRTOS 的源码后,接下来就可以开始进行 FreeRTOS 的移植了。
1. 添加 FreeRTOS 源码
在基础工程的 Middlewares 文件夹中新建一个 FreeRTOS 子文件夹,如下图所示:
图中的 FreeRTOS 就是新建的文件夹,这里要说明的是图中的其他文件夹为内存管理实验工程中原本就存在的,对于正点原子的不同 STM32 开发板图 中的文件可能有所不同,但只需新建一个 FreeRTOS 子文件即可。
接着就需要将 FreeRTOS 的源代码添加到刚刚新建的 FreeRTOS 子文件中了。将 FreeRTOS内核源码的 Source 文件夹下的所有文件添加到工程的 FreeRTOS 文件夹中,如下图所示:
图 2.1.2.2 中各文件和文件夹的描述在 1.3.2 小节中已经说明,对于在正点原子的 STM32 系列开发板上移植 FreeRTOS, portable 文件夹中的文件只需要根据使用的编译器(AC5 或 AC6)使用到图 1.3.2.3 中的三个文件夹,其余用不到的文件,读者可以自行决定删除与否。
2. 将文件添加到工程
打 开 基 础 工 程 , 新 建 两 个 文 件 分 组 , 分 别 为 Middlewares/FreeRTOS_CORE 和Middlewares/FreeRTOS_PORT,如下图所示:
Middlewares/FreeRTOS_CORE 分组用于存放 FreeRTOS 的内核 C 源码文件, 将“1. 添加FreeRTOS 源码”步骤中的 FreeRTOS 目录下所有的 FreeRTOS 的内核 C 源文件添加到Middlewares/FreeRTOS_CORE 分组中。
Middlewares/FreeRTOS_PORT 分组用于存放 FreeRTOS 内核的移植文件,需要添加两类文件到这个分组,分别为 heap_x.c 和 port 文件。
首先是 heap_x.c, 在路径 FreeRTOS/portable/MemMang 下有五个 C 源文件,这五个 C 源文件对应了五种 FreeRTOS 提供的内存管理算法,读者在进行 FreeRTOS 移植的时候可以根据需求选择合适的方法,具体这五种内存管理的算法,在后续 FreeRTOS 内存管理章节会具体分析,这里就先使用 heap_4.c,将 heap_4.c 添加到 Middlewares/FreeRTOS_PORT 分组中。
接着是 port 文件, port 文件是 FreeRTOS 这个软件与 MCU 这个硬件连接的桥梁,因此对于正点原子的 STM32 系列不同的开发板,所使用的 port 文件是不同的。 port 文件的路径在FreeRTOS/portable/RVDS 或 FreeRTOS/portable/GCC 下。进入到 FreeRTOS/portable/RVDS 或FreeRTOS/portable/GCC,可以看到 FreeRTOS 针对不同的 MCU 提供了不同的 port 文件,具体正点原子的 STM32 系列开发板与不同 port 文件的对应关系如下表所示:
只需将开发板芯片对应的 port 文件添加到 Middlewares/FreeRTOS_PORT 分组中即可。
将所有 FreeRTOS 相关的所需文件添加到工程后,如下图所示:
3. 添加头文件路径
接下来添加 FreeRTOS 源码的头文件路径,需要添加两个头文件路径,毋庸置疑,其中一个头文件路径就是 FreeRTOS/include,另外一个头文件路径为 port 文件的路径,根据表 2.1.2.4中不同类型开发板与 port 文件的对应关系进行添加即可。 添加完成后如下图所示(这里以正点原子的 STM32F1 系列开发板为例,其他类型的开发板类似):
4. 添加 FreeRTOSConfig.h 文件
FreeRTOSConfig.h 是 FreeRTOS 操作系统的配置文件, FreeRTOS 操作系统是可裁剪的,用户可以根据需求对 FreeRTOS 进行裁剪,裁剪掉不需要用到的 FreeRTOS 功能,以此来节约 MCU中寸土寸金的内存资源。那么 FreeRTOSConfig.h 文件从哪里来呢?主要有三个途径:
(1) FreeRTOSConfig.h 获取途径一
第一种途径就是用户自行编写,用户可以根据自己的需求编写 FreeRTOSConfig.h 对FreeRTOS 操作系统进行裁剪。 FreeRTOS 官网的在线文档中就详细地对 FreeRTOSConfig.h 中各个配置项进行了描述,网页链接: https://www.freertos.org/a00110.html。当然,对于 FreeRTOS 新手来说,笔者是不建议自行编写的。