FreeRTOS各个目录的功能简介
1. Demo目录:这个目录下主要包含了大量官方支持的微控制器和不同平台上的项目,包括常用的stm32和keil平台下进行开发的项目。我主要使用的是CORTEX_STM32F103_Keil和common两个目录,对系统进行精简的话可以只保留这两个目录,其他大量的目录都可以删除。在删除前一定要选择好自己的微控制器和平台。
2. Source目录:这个目录包含了FreeRTOS内核的源代码。
include-包含FreeRTOS内核的头文件,这是使用FreeRTOS的API和数据类型的必要文件。
portable-包含针对特定处理器体系结构的移植层代码,每个处理器体系结构一般都有对应的子目录,如ARM、MIPS、Xilinx等。这是将FreeRTOS移植到特定平台的必要文件。里面选择开发的微处理器内核和工具,选用RVDS和选用的是stm32f103选用的是ARM-M3架构,所以只需保留这个RVDS里面的ARM_CM3目录就行。另外一个目录是MenMang,是进行内存管理的,里面包含的文件有heap,五个heap分别为:
- heap_1 —— 最简单,不允许释放内存。
- heap_2—— 允许释放内存,但不会合并相邻的空闲块。
- heap_3 —— 简单包装了标准 malloc() 和 free(),以保证线程安全。
- heap_4 —— 合并相邻的空闲块以避免碎片化。 包含绝对地址放置选项。
- heap_5 —— 如同 heap_4,能够跨越多个不相邻内存区域的堆。
3. Tools目录:这个目录包含一些工具和脚本,用于构建、调试和测试FreeRTOS应用,可以删除。
4. FreeRTOS-Plus目录:是生态文件可以删除的
FreeRTOS移植文件
FreeRTOS的最核心文件只有2个: FreeRTOS/Source/tasks.c和 FreeRTOS/Source/list.c
其他文件有:
FreeRTOS/Source/下的文件 | 作用 |
tasks.c | 必需,任务操作 |
list.c | 必须,列表 |
queue.c | 基本必需,提供队列操作、信号量(semaphore)操作 |
timer.c | 可选,software timer |
event_groups.c | 可选,提供event group功能 |
croutine.c | 可选,过时 |
FreeRTOS需要3个头文件目录:
- FreeRTOS本身的头文件:FreeRTOS/Source/include
- 移植时用到的头文件:FreeRTOS/Source/portable/[compiler]/[architecture]
- 含有配置文件FreeRTOSConfig.h的目录
头文件 | 作用 |
FreeRTOSConfig.h | FreeRTOS的配置文件,比如选择调度算法:configUSE_PREEMPTION 每个demo都必定含有FreeRTOSConfig.h 建议去修改demo中的FreeRTOSConfig.h,而不是从头写一个 |
FreeRTOS.h | 使用FreeRTOS API函数时,必须包含此文件。 在FreeRTOS.h之后,再去包含其他头文件,比如: task.h、queue.h、semphr.h、event_group.h |
Demo目录下是预先配置好的、没有编译错误的工程。目的是让你可以基于它进行修改,以适配你的单板。 这些Demo还可以继续精简:
Demo/Common 中的文件可以完全删除
main函数中只需要保留2个函数:
prvSetupHardware()
vTaskStartScheduler()