freeRTOS

← 返回 MOC | ← 主页

一句话:一个开源的、轻量级的实时操作系统内核,专为嵌入式系统设计,核心是任务调度


一、基本概念

什么是 RTOS

官网代码下载

裸机 vs RTOS 对比

  • 轮循(while)
  • 前后台(while+中断)
  • 定时器加驱动(while是空的,程序靠定时器驱动,定时器里让cnt++,然后取模运算实现时间片)
  • 状态机(把复杂耗时的函数切碎,每次执行一个状态的代码,从而实现并行)
  • RTOS(适合需要并行的,复杂的系统)

freeRTOS 特点


二、任务管理

任务的概念

任务状态(运行 / 就绪 / 阻塞 / 挂起)

运行态就绪态阻塞态挂起态
同一时间就一个能执行但没执行的等待外部事件类似暂停,调用vTASKSuspend(),需要vTASKResume()解挂进入就绪态

1774316892245

除了运行态,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作用