第一章:RTOS概述

1.1 什么是RTOS?

RTOS,全称Real-Time Operating System,中文叫实时操作系统。说白了,它就是一个能保证在限定时间内完成任务的系统。

我刚开始接触嵌入式开发时,对“实时”这个词有误解。以为实时就是快,越快越好。其实不然。实时强调的是“可预测性”——你给一个任务10毫秒,它必须在10毫秒内完成,不能早也不能晚。我在项目中遇到过这样一个案例:一个工业控制设备,要求每5毫秒采集一次传感器数据。用裸机写,偶尔会因为中断嵌套导致采集延迟,结果产品送检时直接被打了回来。后来换成RTOS,任务调度一上,问题就解决了。

核心要点:RTOS不是让系统跑得更快,而是让系统跑得更“准时”。

1.2 RTOS与裸机系统的区别

很多初学者会问:我裸机写得好好的,为什么要用RTOS?

嗯,这个问题我当年也问过。咱们来对比一下:

对比项 裸机系统 RTOS
任务管理 主循环+中断 多任务调度
实时性 依赖程序员水平 系统保证
代码复杂度 简单项目还行 适合复杂项目
资源开销 几乎没有 需要几KB RAM
调试难度 容易 需要学习

你想想看,如果你的项目只有三个功能:LED闪烁、按键检测、串口打印。裸机完全够用。但如果是智能手表,要同时处理触摸屏、蓝牙、传感器、显示刷新...裸机写出来的代码,维护起来会让人崩溃。

我的建议:功能少于5个、任务周期差异不大时,用裸机。反之,上RTOS。别为了用RTOS而用RTOS,也别死守着裸机不放。

1.3 主流RTOS介绍

市面上RTOS很多,我挑三个最常用的聊聊。

FreeRTOS

这是目前用得最广的RTOS。开源、免费、文档全。我最早学的就是它。它的内核代码写得非常精炼,很适合初学者阅读源码。我曾经花了一个月时间,把FreeRTOS的调度器源码一行一行啃下来,收获很大。

特点:

  • 代码量小,核心只有几千行
  • 支持多种架构:ARM、RISC-V、MSP430等
  • 任务数量无限制(理论上)
  • 社区活跃,遇到问题容易找到答案

uC/OS

uC/OS-II和uC/OS-III,由Micrium公司开发。它的代码风格非常规范,适合教学。我记得大学时老师就是用uC/OS-II来讲操作系统的。

特点:

  • 代码注释详细,可读性强
  • 实时性表现优秀
  • 商业使用需要授权
  • 支持优先级继承,防止优先级反转

RT-Thread

国产RTOS,近几年发展很快。它不只是内核,还提供了文件系统、网络协议栈、设备驱动框架等组件。

特点:

  • 组件丰富,开箱即用
  • 支持动态加载模块
  • 有完善的开发工具链
  • 中文文档友好

避坑指南:我曾经在项目选型时,因为贪图RT-Thread的组件丰富,选了一个资源受限的MCU。结果发现ROM和RAM都不够用。所以选RTOS时,一定要先评估硬件资源。

1.4 RTOS的应用场景

RTOS到底用在哪些地方?我总结了几类典型场景:

  1. 工业控制:PLC、数控机床、机器人控制器。这类设备对实时性要求极高,延迟几毫秒就可能出事故。
  2. 汽车电子:发动机控制、ABS系统、车载娱乐系统。汽车上的ECU越来越多,RTOS是标配。
  3. 消费电子:智能手表、无人机、扫地机器人。功能复杂,需要多任务协同。
  4. 物联网终端:传感器节点、智能网关。需要低功耗、稳定运行。
  5. 医疗设备:监护仪、输液泵。人命关天,实时性必须保证。

举个例子,我参与过一个无人机飞控项目。飞控需要同时处理:

  • 姿态解算(1kHz频率)
  • GPS数据解析(10Hz)
  • 遥控器信号接收(50Hz)
  • 电机控制输出(1kHz)
  • 日志记录(后台任务)

用裸机写?中断嵌套能把人绕晕。用RTOS,每个功能一个任务,优先级一设,调度器自动搞定。这就是RTOS的价值所在。

一句话总结:当你的嵌入式项目开始出现“这个功能等那个功能,那个功能又等另一个功能”的情况时,就是该上RTOS的时候了。

好了,第一章就聊到这里。下一章我们深入FreeRTOS的内核源码,看看任务调度到底是怎么实现的。