12.2.2 FreeRTOS的文件结构
从官网下载FreeRTOS文件,其结构如图12.3所示,“FreeRTOS”和“FreeRTOS-Plus”这两个文件夹中就是FreeRTOS的源码。其中,“FreeRTOS”中的是核心源码,“FreeRTOS-Plus”中的为附加组件,如TCP/UDP、MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)等。下面以FreeRTOS Kernel V10.0.1版本为例进行介绍。

图12.3 FreeRTOS文件结构
FreeRTOS源码分成3个部分,分别是与处理器无关的代码、与应用配置有关的代码和与处理器有关的代码,如图12.4所示。与处理器有关的文件有“port.c”“heep_1.c~heep_5.c”“portmacro.c”。其中,“port.c”文件主要针对不同CPU提供任务切换、时钟节拍、堆栈初始化等的程序,“portmacro.c”文件主要定义了内核代码用到的数据类型和CPU架构相关的定义、内核调度、临界区管理、任务优化等函数,“heep_1.c~heep_5.c”文件提供以下5种内存管理方式。

图12.4 FreeRTOS源码结构
heap_1.c:任务执行之前先分配内存,一次分配永久使用,不再改变。
heap_2.c:允许内存释放,适用于需要频繁创建和删除需要分配固定栈内存的任务。(https://www.daowen.com)
heap_3.c:malloc()和free()函数的抽象层,增加了线程安全措施。
heap_4.c:将相邻未分配的内存结合成整个大内存来减少碎片内存。
heap_5.c:在“heap_4.c”文件的基础上增加了块内存段操作。
其中,与处理器无关的代码中包含许多函数,部分函数需要在应用程序中调用;与应用配置有关的代码通常在与应用程序有关的配置文件中,FreeRTOS属于可裁剪的系统,要用的代码就使能,不用的就禁止,FreeRTOSConfig.h即用户配置文件;系统要运行在不同的处理器平台上,因此还必须要有与处理器有关的代码,包括CPU内核调度、任务切换、压栈、出栈、内存分配以及为操作系统提供心跳时钟的定时器有关的代码。
FreeRTOS的与处理器无关的文件有“tasks.c”“list.c”“timers.c”“event_groups.c”“croutine.c”“queue.c”“stream_buffer.c”,如表12.1所示。
表12.1 FreeRTOS的与处理器无关的文件
