第一章 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
2
3
4
5
6
7
/* Init scheduler */
osKernelInitialize(); /* 初始化FreeRTOS运行环境 */
MX_FREERTOS_Init(); /* 创建任务 */

/* Start scheduler */
osKernelStart(); /* 启动调度器 */

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、变量名

image5

3、函数名

image6

4、宏定义

image7

image8