【重要嵌入式概念】嵌入式里面什么是任务执行jitter

📖 精选 ✍️ Jack | 📅 2026-03-24 | 👍 2 | 原帖↗
#知识星球 #立芯嵌入式 #来源/立芯星球 #技术/FreeRTOS #技术/实时性 #质量/精华

原帖 | Jack | 2026-03-24 23:36 | 👍2 | 阅读约1

【重要嵌入式概念】嵌入式里面什么是任务执行jitter?

在嵌入式里,任务执行 jitter,一般翻译成任务执行抖动,本质上就是:
同一个任务,本来应该“稳定地”在某个时间点运行,但它实际开始执行、结束执行,或者执行周期,每次都会有一点波动,这个波动就叫 jitter。
你可以把它理解成:

任务的时序不稳定。
1. 最直观的理解
比如一个周期任务要求:
每 10ms 运行一次
理想情况:10ms、20ms、30ms、40ms……
但实际变成了:
10.1ms、19.8ms、30.4ms、39.7ms……
这种和理想时间点之间的偏差,就是 jitter。
2. 常见有三种理解方式
(1)启动 jitter
任务本来应该在某个时刻开始,但实际开始时间有波动。
比如:
理想:100ms 整开始执行
实际:有时 100.1ms,有时 100.6ms
这叫启动抖动。
(2)周期 jitter
任务的执行周期本来应该固定,但相邻两次运行间隔不一致。
比如:
理想周期:10ms
实际周期:9.7ms、10.3ms、9.9ms
这叫周期抖动。
(3)完成 jitter
任务完成的时刻不稳定。
比如这个任务虽然都差不多开始,但有时 1ms 跑完,有时 2.5ms 跑完,那输出结果对外呈现的时间也会抖。
3. 为什么会有 jitter
嵌入式里很常见,典型原因有这些:
(1)中断打断
任务执行到一半,被高优先级中断抢走了。
比如:
正在跑控制任务
突然来了串口中断、DMA中断、定时器中断
任务恢复回来时,时间已经偏了
(2)任务调度延迟
RTOS 里任务不是想跑就立刻跑,还得看:
有没有更高优先级任务在运行
是否被临界区关中断
是否被互斥锁阻塞
调度器何时切换过来
(3)共享资源竞争
多个任务抢同一个资源:
I2C 总线
SPI 总线
串口
互斥锁
缓冲区
抢不到资源,就会导致执行时间漂移。
(4)执行路径不固定
有些任务每次做的事不一样。
比如:
这次解析 10 字节
下次解析 100 字节
有时走异常分支
有时要重发
那执行时间自然不固定。
(5)Cache / Flash 等底层因素
在更高性能 MCU 或 MPU 上,还可能有:
Cache miss
Flash wait state
总线仲裁
DMA 抢带宽
这些都会让时间不那么“死”。
4. 为什么 jitter 很重要
因为很多嵌入式系统,尤其是实时系统,关心的不只是“能不能执行”,而是“能不能准时执行”。
比如:
电机控制
采样系统
音频处理
通信时序
闭环控制
显示刷新
如果 jitter 太大,可能会导致:
采样不均匀
控制环不稳定
波形失真
数据包超时
人机交互卡顿
5. 举个很典型的例子
比如一个 1ms 的控制任务:
读取 ADC
算 PID
更新 PWM
理想上它必须每 1ms 严格执行一次。
如果 jitter 很大:
有时 1.0ms 执行
有时拖到 1.4ms
有时又变成 0.8ms
那控制周期就乱了,PID 的离散时间基础被破坏,控制效果就会变差,严重时甚至振荡。
6. 怎么描述 jitter
工程上经常这么说:
最大 jitter
峰峰值 jitter
RMS jitter
任务唤醒抖动
周期抖动
比如:
该任务理论周期为 5ms,实测周期抖动在 ±80us 以内。
或者:
由于串口中断和临界区影响,任务唤醒存在约 200us 的启动 jitter。
7. 怎么降低 jitter
常见手段:
提高关键任务优先级
缩短中断处理时间,ISR 只做最小化工作
把重活从中断搬到任务里
减少临界区时间
避免低优先级任务长时间占 CPU
固定任务执行路径,减少不确定分支
用硬件定时器触发关键动作,而不是纯软件调度
对控制/采样任务使用更严格的时钟基准
一句话就是:

减少时序上的不确定性。
8. 一句很适合面试的回答
你可以直接这么说:
任务执行 jitter 本质上就是任务实际执行时间相对理想时间的波动。比如一个周期任务理论上每 10ms 执行一次,但由于中断抢占、任务调度延迟、资源竞争或者执行路径不固定,实际启动时刻和执行周期会有偏差,这个偏差就是 jitter。对于控制、采样、通信这类实时性强的场景,jitter 过大会影响系统稳定性,所以通常要通过优化中断、调度和资源访问来控制它。


相关笔记