跳转至

第 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(国产)

课后练习

  1. 调度分析 :系统中有三个任务:TaskA(优先级 3)、TaskB(优先级 2)、TaskC(优先级 1,数字越大优先级越高)。TaskA 等待信号量,TaskB 正在运行,TaskC 就绪。此时信号量被释放,描述任务切换过程。

  2. 机制选择 :以下场景分别适合使用哪种任务间通信机制?

    • 温度传感器任务需要将数据发送给显示任务
    • 两个任务不能同时访问打印机
    • 主任务需要等待 GPS 定位完成和网络连接成功两个条件
  3. 真题演练 :FreeRTOS 采用(  )调度方式,同优先级任务之间采用(  )调度。


下一章预告: RTOS 管理任务运行,但程序怎么"烧"进芯片?交叉编译、启动代码、Bootloader——嵌入式软件开发的独特流程。第 4 章见。

继续第 4 章:嵌入式软件开发 →