一、实时系统概述

大家好,我是老张。在嵌入式领域摸爬滚打了十几年,今天咱们来聊聊实时系统。说实话,这话题看着基础,但真要在多核处理器上把它玩明白,坑可不少。

先问个问题:你手机死机了,重启一下就好。但要是自动驾驶汽车的控制系统死机了呢?嗯,这就是实时系统要解决的核心问题——系统必须在规定时间内完成指定任务

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 美元。所以代码要精简,逻辑要清晰,测试要全覆盖。

知识体系总览

下面这张图,是我自己画的实时系统知识体系。你看一眼,心里就有数了。

实时系统 定义:时间正确性 分类 应用场景 硬实时 软实时 自动驾驶 工业控制 航空航天 图1:实时系统知识体系结构

这张图把实时系统的三个核心维度串起来了。定义是基础,分类决定设计思路,应用场景决定具体实现。后面咱们讲多核任务分配,每一步都离不开这三个维度。

一句话总结:实时系统就是「在规定时间内,做规定的事」。硬实时是「必须做到」,软实时是「尽量做到」。搞清楚了这一点,后面的多核任务分配才有方向。


公众号:蓝海资料掘金营,微信deep3321