第一章 FreeRTOS 源码
第一章 FreeRTOS 源码
为巽1.1FreeRTOS目录结构
核心文件有两个:
- FreeRTOS/Source/tasks 必选,任务操作
- FreeRTOS/Source/list.c 必选,列表
- FreeRTOS/Source/queue.c 基本必需,提供队列操作、信号量操作
- FreeRTOS/Source/timer.c 可选,重置事件
- FreeRTOS/Source/event_groups.c 可选,提供时间组(event froup)
- FreeRTOS/Source/croutine.c 可选,过时了
1.2头文件
1、FreeRTOSConfig.c
FreeRTOS的配置文件,例如:选择跳读算法 configUSE_PREEMPTION,每个DEMO都必定含有,修改demo的时候是修改这个文件
2、FreeRTOS.h
调用API必需含有此文件,在包含其他头文件例如task.h
3、内存管理
文件放在Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang,放在portable可以提供自己的函数
对于内存管理有5种方法
文件 | 优点 | 缺点 |
---|---|---|
heap_1.c | 分配简单,时间确定 | 只分配,不回收 |
heap_2.c | 动态分配、最佳匹配 | 碎片,时间不定 |
heap_3.c | 调用标准库函数 | 速度慢、时间不定 |
heap_4.c | 相邻空闲内存可以合并 | 解决碎片问题,时间不定 |
heap_5.c | 在4的基础上支持分隔的内存块 | 可解决碎片问题、时间不定 |
1.3入口函数
在main函数中,初始化FreeRTOS、创建任务,启动调度器
1 | /* Init scheduler */ |
1.4 数据类型
1、在portmacro.h头文件,里面定义了2个数据类型
- TickType_t:
- FreeRTOS配置了一个周期性的时钟中断:Tick Interrupt
- 每发生一次中断,中断次数累加,这被称为tick count
- tick count这个变量的类型就是TickType_t
- TickType_t可以是16位的,也可以是32位的
- FreeRTOSConfig.h中定义configUSE_16_BIT_TICKS时,TickType_t就是uint16_t
- 否则TickType_t就是uint32_t
- 对于32位架构,建议把TickType_t配置为uint32_t
- BaseType_t:
- 这是该架构最高效的数据类型
- 32位架构中,它就是uint32_t
- 16位架构中,它就是uint16_t
- 8位架构中,它就是uint8_t
- BaseType_t通常用作简单的返回值的类型,还有逻辑值,比如pdTRUE/pdFALSE
2、变量名
3、函数名
4、宏定义