一、实时系统概述
大家好,我是老张。在嵌入式领域摸爬滚打了十几年,今天咱们来聊聊实时系统。说实话,这话题看着基础,但真要在多核处理器上把它玩明白,坑可不少。
先问个问题:你手机死机了,重启一下就好。但要是自动驾驶汽车的控制系统死机了呢?嗯,这就是实时系统要解决的核心问题——系统必须在规定时间内完成指定任务。
1.1 实时系统的定义
实时系统,说白了就是「时间说了算」的系统。它不光要算得对,还得算得准时。
我习惯这样定义:
实时系统 = 逻辑正确性 + 时间正确性
举个例子,你写了个程序计算 1+1=2,结果对了。但如果这个结果是在按下按钮后 10 秒才出来,那在实时系统里,这就是错的。
核心要点:实时系统的正确性不仅取决于计算结果,还取决于结果产生的时间。
我在做飞控系统时遇到过一件事:有个同事写了个导航算法,算得特别准,但每次计算要花 500 毫秒。而飞控周期是 200 毫秒一次。你想想看,这算法再准也没用,因为等它算完,飞机早不知道飞哪儿去了。
1.2 实时系统的分类
实时系统分两类:硬实时和软实时。这俩的区别,我经常用「错过 deadline 的后果」来区分。
| 特性 | 硬实时 | 软实时 |
|---|---|---|
| 错过截止时间 | 系统崩溃/灾难 | 性能下降/体验变差 |
| 典型场景 | 安全气囊、飞行控制 | 视频播放、网络游戏 |
| 时间确定性 | 必须保证 | 尽量保证 |
| 设计成本 | 高 | 相对低 |
硬实时系统
硬实时系统,错过 deadline 就是事故。我曾经参与过一个汽车安全气囊的项目,从碰撞传感器触发到气囊弹出,必须在 15 毫秒内完成。超过 1 毫秒,人就可能撞到方向盘上。
这类系统的特点是:时间确定性是第一优先级。哪怕牺牲一点计算精度,也要保证按时完成。
软实时系统
软实时系统就宽容多了。错过 deadline 不会出人命,但用户体验会下降。比如你刷短视频,偶尔卡顿一下,能忍。但要是每 3 秒卡一次,你肯定摔手机。
我做过一个视频监控系统,要求 30 帧/秒。偶尔掉到 25 帧,客户也能接受。但要是掉到 10 帧以下,那就得返工了。
我的经验:设计时别把软实时当硬实时做,成本太高。也别把硬实时当软实时做,会出人命。先搞清楚需求再动手。
1.3 实时系统的应用场景
实时系统无处不在,但最典型的就三个领域:自动驾驶、工业控制、航空航天。我挨个说说。
自动驾驶
自动驾驶是实时系统的「集大成者」。一辆 L4 级别的自动驾驶汽车,每秒要处理上 GB 的传感器数据,同时做出转向、刹车、加速等决策。
举个例子,摄像头拍到前方有个行人突然横穿马路。从识别到刹车,整个流程必须在 100 毫秒内完成。这里面涉及:
- 感知:摄像头、激光雷达数据采集(10ms)
- 融合:多传感器数据对齐(20ms)
- 决策:判断是否刹车(30ms)
- 执行:刹车指令到制动器(40ms)
你看,每个环节都有严格的时间预算。我在做自动驾驶项目时,最头疼的就是「感知延迟」和「决策延迟」之间的平衡。感知做得越精细,延迟就越高。但决策又需要足够的信息。这中间的取舍,全靠经验。
工业控制
工业控制是实时系统的「老本行」。从 PLC 到 CNC 机床,从机器人到流水线,全是实时系统。
我印象最深的是一个注塑机项目。注塑机的温度控制要求精度在 ±1°C 以内,采样周期 10 毫秒。如果温度超调,产品就会出现气泡或缩水。
工业控制的特点:
- 周期性强:每个控制周期必须完成采样-计算-输出
- 可靠性要求高:7×24 小时不间断运行
- 环境恶劣:高温、振动、电磁干扰
避坑指南:我曾经在工业项目中用过 Linux 做实时控制,结果发现调度抖动太大。后来换了 RTOS,问题才解决。记住:通用操作系统不适合硬实时控制。
航空航天
航空航天是实时系统的「天花板」。从飞控到航电,从卫星到火箭,每一个子系统都是硬实时。
我参与过一个无人机飞控项目,要求:
- 姿态控制周期:1ms
- GPS 数据更新:10Hz
- 传感器融合:5ms 内完成
- 故障切换:2ms 内完成
这些要求放在多核处理器上,任务分配就成了关键。哪个核跑控制算法,哪个核跑通信协议,哪个核做故障监控——分配不好,系统就崩。
航空航天还有一个特点:认证成本极高。DO-178C 认证,每行代码的认证成本可能高达 100 美元。所以代码要精简,逻辑要清晰,测试要全覆盖。
知识体系总览
下面这张图,是我自己画的实时系统知识体系。你看一眼,心里就有数了。
这张图把实时系统的三个核心维度串起来了。定义是基础,分类决定设计思路,应用场景决定具体实现。后面咱们讲多核任务分配,每一步都离不开这三个维度。
一句话总结:实时系统就是「在规定时间内,做规定的事」。硬实时是「必须做到」,软实时是「尽量做到」。搞清楚了这一点,后面的多核任务分配才有方向。
公众号:蓝海资料掘金营,微信deep3321