本篇目标:把三个被用烂的词说清楚——一致性、可预测性、确定性,并落到两个具体指标:中断延迟和线程切换延迟。
一、三个词,一个意思的三种说法
- 一致性(consistency):同样的输入,行为每次都一样;
- 可预测性(predictable):延迟有上界,能提前算出来;
- 确定性(deterministic):最坏情况可复现、可证明。
实时系统的“实时”不是“快”,而是最坏情况时间有保证。一个平均 1µs、最坏 100µs 的系统,比平均 10µs、最坏 20µs 的系统更不实时。所以衡量 RTOS 要看最坏值,不是平均值。
二、中断延迟:从硬件到软件的完整链条
中断延迟 = 从中断请求产生,到 ISR 第一条指令开始执行的时间。拆开看:
- 硬件固定开销:Cortex-M 的中断响应(压栈、取向量)约 12 个周期,所有 RTOS 一样;
- 关中断窗口:内核临界区里关中断的时间。这是 RTOS 自己引入的最大变量——关得越久,中断延迟越差;
- 高优先级抢占链:来了更高优先级中断,当前中断还得再等。
所以 RTOS 的设计铁律是:临界区越短越好。stp_rtos 的
stp_hw_interrupt_disable 用 PRIMASK 全局关中断,因此临界区必须精悍;FreeRTOS 在 Cortex-M 上进一步用 BASEPRI 只屏蔽受管中断,让高优先级中断仍可响应——这是 stp_rtos 可借鉴的优化点。三、线程切换延迟
线程切换延迟 = 从“决定切换”到“新线程开始执行”的时间。Cortex-M 上主要由 PendSV 决定:
固定保存/恢复 R4~R11(8 个寄存器)+ 硬件弹栈 8 个字,切换时间基本恒定,不随任务数量变化。这正是“确定性”的体现:切换开销是 O(1),不是 O(n)。
四、PendSV 为什么必须是最低优先级
如果 PendSV 优先级高,它会在某个 ISR 执行到一半时插入切换,导致:
- 被中断的 ISR 要等整个切换完成才能继续 → 中断延迟被拉长且不可预测;
- 切换本身可能被更高优先级中断打断 → 切换时间也不确定。
把 PendSV 设为最低优先级后,所有 ISR 都跑完才切换,切换时机确定、切换过程不被中断打断,两个延迟都变得可预测。
五、小结
- 实时 = 最坏情况有界,不是平均快;
- 中断延迟的大头是“关中断窗口”,要拼命缩短;
- 线程切换 O(1),PendSV 最低优先级保证切换时机确定。
核心一句话:确定性不是玄学,是“关中断短 + 切换 O(1) + PendSV 最低优先级”三个工程决策的叠加。
- Author:felixfixit
- URL:http://www.felixmicrospace.top/article/consistency_predictability_determinism
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!


