freeRTOS
一句话:一个开源的、轻量级的实时操作系统内核,专为嵌入式系统设计,核心是任务调度
一、基本概念
什么是 RTOS
裸机 vs RTOS 对比
- 轮循(while)
- 前后台(while+中断)
- 定时器加驱动(while是空的,程序靠定时器驱动,定时器里让cnt++,然后取模运算实现时间片)
- 状态机(把复杂耗时的函数切碎,每次执行一个状态的代码,从而实现并行)
- RTOS(适合需要并行的,复杂的系统)
freeRTOS 特点
二、任务管理
任务的概念
任务状态(运行 / 就绪 / 阻塞 / 挂起)
| 运行态 | 就绪态 | 阻塞态 | 挂起态 |
|---|---|---|---|
| 同一时间就一个 | 能执行但没执行的 | 等待外部事件 | 类似暂停,调用vTASKSuspend(),需要vTASKResume()解挂进入就绪态 |

除了运行态,3个状态有对应的链表
就绪列表:pxReadyTasksLists[x],其中 x 代表任务优先级数值。
阻塞列表:pxDelayedTaskList。
挂起列表:xSuspendedTaskList。
创建与删除任务
xTaskCreate();
vTaskDelete();任务优先级
抢占式调度(数越大越高),同级时间片轮询
RTOS 调用器启动时,自动创建一个空闲任务(最低优先级),负责释放被删除的任务的内存,低功耗
任务调度器
上下文切换:保存当前任务的 CPU 现场到它自己的堆栈(这里的栈是数据结构),并从另一个任务的堆栈中恢复现场。
PendSV 中断: 在 Cortex-M 内核里,这就是专门负责“搬运”上下文的苦力工
三、任务间通信
队列 Queue
xQueueCreate();
xQueueSend();
xQueueReceive();信号量 Semaphore
二值信号量
计数信号量
互斥量 Mutex
事件组 Event Group
四、软件定时器
通过滴答计数变量测量时间,滴答中断以严格的时间精度增加滴答数
xTimerCreate();
xTimerStart();
xTimerStop();五、内存管理
heap_1 ~ heap_5 方案对比
动态分配与静态分配
六、移植与配置
FreeRTOSConfig.h 关键配置项
移植到 STM32 步骤
七、常用 API 速查
| API | 作用 |
|---|---|