第 3 章:嵌入式操作系统 —— 设备的"管家"¶
场景: 智能家居中控需要同时处理多个任务:监测温度传感器、控制空调、响应手机 App 指令、显示屏幕信息。如果只有一个"大脑"(CPU),怎么同时做这么多事?嵌入式操作系统(RTOS)就是负责"分时调度"的管家。
3.1 为什么需要嵌入式操作系统?¶
核心比喻:RTOS 就是智能家居的"管家调度系统"
没有管家(裸机程序):你自己记住什么时候该做什么——"每 5 分钟检查一次温度,每 10 分钟检查一次门锁……"——事情多了就乱套。
有管家(RTOS):你告诉管家"温度监控优先级最高,门锁检查次之,屏幕更新最低"。管家自动安排——温度异常时立即处理,屏幕刷新可以稍等。
裸机程序 vs RTOS¶
| 对比维度 | 裸机程序(前后台系统) | RTOS |
|---|---|---|
| 任务管理 | 大循环 + 中断(开发者自己管理) | 操作系统统一调度 |
| 实时性 | 难以保证(取决于循环时间) | 可精确保证(优先级抢占) |
| 开发复杂度 | 简单任务容易,复杂任务困难 | 复杂任务更容易管理 |
| 资源开销 | 极小 | 需要额外 RAM/ROM(几 KB) |
| 适用场景 | 功能简单的设备 | 多功能、多任务的设备 |
3.2 实时操作系统(RTOS)核心概念¶
任务(Task)¶
任务是 RTOS 中独立运行的执行单元,每个任务有自己的堆栈和优先级。
| 状态 | 含义 |
|---|---|
| 就绪态 | 任务准备好运行,等待 CPU |
| 运行态 | 任务正在使用 CPU 执行 |
| 阻塞态 | 任务等待某个事件(如延时、信号量) |
| 挂起态 | 任务被主动暂停 |
| 休眠态 | 任务尚未创建或已被删除 |
任务调度¶
| 调度方式 | 说明 | 特点 |
|---|---|---|
| 抢占式调度 | 高优先级任务就绪时立即抢占 CPU | 实时性好,RTOS 标配 |
| 时间片轮转 | 同优先级任务轮流执行 | 公平,适合同等重要任务 |
| 协作式调度 | 任务主动放弃 CPU 才切换 | 简单但实时性差 |
优先级反转
高优先级任务等待低优先级任务持有的资源,而低优先级任务被中优先级任务抢占——导致高优先级任务被无限期阻塞。
解决方案:优先级继承 ——低优先级任务持有资源时,临时提升到等待者的优先级。
3.3 任务间通信¶
| 机制 | 用途 | 比喻 |
|---|---|---|
| 信号量(Semaphore) | 资源访问同步、任务同步 | 餐厅的等位牌(有空位才能进) |
| 互斥量(Mutex) | 保护共享资源(互斥访问) | 厕所门锁(一次只能一个人用) |
| 消息队列(Queue) | 任务间传递数据 | 信箱(发送方投递,接收方取件) |
| 事件标志组 | 多事件同步 | 集合哨(人到齐了才出发) |
| 邮箱(Mailbox) | 传递单条消息 | 快递柜(一个格子放一个包裹) |
信号量 vs 互斥量¶
| 对比维度 | 信号量 | 互斥量 |
|---|---|---|
| 用途 | 资源计数、任务同步 | 互斥访问共享资源 |
| 计数 | 可以是任意值(计数信号量) | 只有 0 和 1(二值) |
| 优先级继承 | 不支持 | 支持(防止优先级反转) |
| 谁释放 | 任何任务都可以释放 | 只有获取者才能释放 |
3.4 常见嵌入式操作系统¶
| RTOS | 特点 | 适用场景 | 开源 |
|---|---|---|---|
| μC/OS-II/III | 经典、稳定、资料丰富、认证齐全 | 工业、医疗、航空 | ✅ |
| FreeRTOS | 轻量、免费、市场占有率最高 | 物联网、消费电子 | ✅ |
| RT-Thread | 国产、组件丰富、社区活跃 | 物联网、智能家居 | ✅ |
| VxWorks | 高性能、高可靠性、商业授权 | 航空航天、国防 | ❌ |
| 嵌入式 Linux | 功能完整、生态丰富 | 复杂设备(路由器、智能电视) | ✅ |
FreeRTOS vs μC/OS¶
| 对比维度 | FreeRTOS | μC/OS-III |
|---|---|---|
| 内核大小 | ~6KB ROM | 624KB ROM |
| 任务数 | 无限制 | 无限制 |
| 优先级数 | 可配置 | 无限制 |
| 时间片 | 支持 | 支持 |
| 安全认证 | 无 | IEC 61508、ISO 26262 等 |
| 商业使用 | MIT 开源免费 | 需商业授权 |
3.5 常见考试题型¶
例题 1: 在 RTOS 中,高优先级任务就绪时立即抢占低优先级任务 CPU 的调度方式称为( )。
A. 时间片轮转 B. 协作式调度 C. 抢占式调度 D. 先来先服务
查看答案
答案:C
抢占式调度(Preemptive Scheduling)是 RTOS 的核心特征——当高优先级任务就绪时,立即抢占当前运行的低优先级任务,保证实时响应。
例题 2: 以下用于保护共享资源互斥访问的机制是( )。
A. 消息队列 B. 互斥量 C. 事件标志组 D. 邮箱
查看答案
答案:B
互斥量(Mutex)专门用于保护共享资源的互斥访问,一次只有一个任务能持有互斥量。它还支持优先级继承,防止优先级反转。
例题 3: 优先级反转问题的解决方案是( )。
查看答案
答案:优先级继承(Priority Inheritance)
当低优先级任务持有高优先级任务需要的资源时,将低优先级任务临时提升到等待者的优先级,防止被中优先级任务抢占,从而避免高优先级任务被无限期阻塞。
要点总结¶
- RTOS 负责任务调度,保证实时性,适合多功能多任务设备
- 任务状态:就绪→运行→阻塞→挂起→休眠
- 抢占式调度是 RTOS 核心特征,保证高优先级任务及时响应
- 任务间通信:信号量、互斥量、消息队列、事件标志组
- 优先级反转用优先级继承解决
- 常见 RTOS:FreeRTOS(免费)、μC/OS(认证全)、RT-Thread(国产)
课后练习¶
-
调度分析 :系统中有三个任务:TaskA(优先级 3)、TaskB(优先级 2)、TaskC(优先级 1,数字越大优先级越高)。TaskA 等待信号量,TaskB 正在运行,TaskC 就绪。此时信号量被释放,描述任务切换过程。
-
机制选择 :以下场景分别适合使用哪种任务间通信机制?
- 温度传感器任务需要将数据发送给显示任务
- 两个任务不能同时访问打印机
- 主任务需要等待 GPS 定位完成和网络连接成功两个条件
-
真题演练 :FreeRTOS 采用( )调度方式,同优先级任务之间采用( )调度。
下一章预告: RTOS 管理任务运行,但程序怎么"烧"进芯片?交叉编译、启动代码、Bootloader——嵌入式软件开发的独特流程。第 4 章见。