4. 实时任务与网络通信的调度机制
在 MicroAutoBox 这类实时目标机上,车辆网络联调的核心矛盾往往不是“能不能通”,而是“能不能按时通”。实时任务周期、中断响应和网络报文收发三者共享同一套 CPU 时间与中断资源,任何一处的时序偏差都会沿着信号链传导到通信实时性上。理解它们之间的调度关系,是判断联调结果是否可信的前提。
一、三层时序:任务周期、中断响应与报文收发
MicroAutoBox 上的实时程序通常由 Simulink 模型经 RTI 生成,运行在实时操作系统之上。其时间行为可以拆成三个层次:
- 任务周期层:模型以固定采样周期执行,例如 1 ms、5 ms、10 ms。周期任务由定时器中断触发,任务体包含模型计算、I/O 读写和网络报文组装。
- 中断响应层:定时器中断、CAN 控制器接收中断、以太网接收中断等会抢占当前任务。中断服务程序(ISR)执行时间越短,对任务抖动的贡献越小。
- 报文收发层:CAN 报文按周期或事件发送,以太网报文经协议栈封装后由 MAC 发出。发送时刻取决于任务何时把数据写入发送缓冲,接收时刻取决于中断何时被响应。
这三层不是串行关系,而是嵌套关系:任务被中断打断,中断又可能被更高优先级中断打断。因此,一个 1 ms 任务的“实际执行时刻”并不等于“理论触发时刻”,两者之差就是任务抖动。
二、任务抖动如何影响通信实时性
假设某 CAN 报文由 1 ms 任务周期发送,理论发送周期为 1 ms。若任务抖动为 ±200 μs,则报文实际发送间隔在 0.8 ms 到 1.2 ms 之间波动。对于接收端而言,如果它按固定周期采样该报文,就可能出现“有时收到两帧、有时一帧都收不到”的采样错位。这种错位在闭环控制中会表现为信号相位滞后或控制量跳变。
抖动的来源主要有四类:
- 任务执行时间波动:模型分支、查表、浮点运算量随输入变化,导致任务体执行时间不恒定。
- 中断抢占:高优先级中断(如 CAN 接收中断)在任务执行期间插入,延长任务完成时间。
- 资源竞争:多个任务共享同一 CAN 控制器或以太网 MAC,发送请求排队等待。
- 协议栈处理:以太网报文需要经过 TCP/IP 或 UDP 协议栈,协议栈内部的任务调度会引入额外延迟。
在联调中,抖动通常用“最大抖动”和“抖动分布”两个指标衡量。最大抖动决定最坏情况下的通信超时风险,抖动分布则反映系统是否稳定。若抖动分布出现双峰,往往意味着存在周期性抢占或资源冲突。
三、调度机制的实际配置与观察
在 MicroAutoBox 的 RTI 配置中,任务周期、优先级和中断向量表是三个关键参数。以 dSPACE 的 RTI CAN Blockset 为例,CAN 发送模块可以配置为“周期发送”或“事件发送”。周期发送时,发送时刻由任务触发;事件发送时,发送时刻由模型内部条件触发。两者对抖动的敏感度不同:周期发送的抖动直接等于任务抖动,事件发送的抖动还叠加了条件判断的执行时间。
实际配置时,建议把网络发送任务放在较高优先级,但不要高于安全相关的控制任务。一个常见的做法是:控制任务 1 ms、优先级 10;CAN 发送任务 1 ms、优先级 8;CAN 接收中断优先级高于两者。这样控制任务不会被发送任务阻塞,而发送任务又能及时把数据推入控制器。
观察抖动时,可以在 MicroAutoBox 上启用任务执行时间测量,或使用 dSPACE ControlDesk 的实时变量记录功能,记录任务触发时刻和报文发送时刻。若发现抖动超过周期的 20%,就需要检查是否有中断嵌套过深或任务执行时间过长。
图中展示了 1 ms 任务周期下,中断插入导致任务完成时刻偏移,进而使 CAN 发送帧的实际发送时刻偏离理论时刻。接收帧的到达时刻同样受中断响应延迟影响。抖动区间用红色虚线标出,直观反映“理论时刻”与“实际时刻”的差距。
四、降低抖动、提升通信实时性的工程手段
在联调阶段,可以从以下几个方向压缩抖动:
- 缩短 ISR:CAN 接收中断中只做数据搬运,把解析和计算放到任务中。ISR 执行时间从 20 μs 降到 5 μs,任务抖动可减少约 15 μs。
- 固定任务执行时间:避免在任务中做条件分支复杂的运算,必要时把大计算拆到多个周期。执行时间波动从 ±50 μs 降到 ±10 μs,抖动随之下降。
- 使用硬件发送队列:CAN 控制器支持多邮箱发送时,任务只需把报文写入邮箱,由硬件按优先级发送,减少任务等待时间。
- 分离网络任务与控制任务:把 CAN 发送放在独立任务中,避免控制任务的计算波动直接传递到发送时刻。
- 监控抖动指标:在 ControlDesk 中记录任务触发到报文发送的时间差,设置阈值告警。若最大抖动超过周期 20%,应检查中断嵌套和任务优先级配置。
五、一个可复用的检查清单
| 检查项 | 目标值(示例) | 观察手段 |
|---|---|---|
| 任务周期抖动 | ≤ 周期 10% | ControlDesk 任务时间测量 |
| ISR 执行时间 | ≤ 10 μs | 示波器打点或 CPU 负载记录 |
| CAN 发送时刻偏差 | ≤ 100 μs | CAN 分析仪时间戳对比 |
| 接收中断响应延迟 | ≤ 50 μs | CAN 分析仪与任务记录对比 |
| 以太网协议栈延迟 | ≤ 200 μs | 网络抓包时间戳 |
这张表可以作为联调前的自检依据。需要说明的是,表中数值是示例目标,实际项目应根据控制周期和网络负载调整。例如 10 ms 周期的车身网络,抖动容忍度可以放宽到 1 ms;而 1 ms 周期的底盘控制,抖动应控制在 100 μs 以内。
理解任务周期、中断响应与报文收发的时序关系,最终要落到“抖动是否可接受”这一判断上。联调时不要只看通信是否成功,还要看通信是否准时、是否稳定。只有把抖动控制在合理范围内,MicroAutoBox 的实时网络通信才具备工程可信度。