轮询、中断与优先级怎样影响响应时间
四个时刻必须分开
text
t_event 外设产生事件
t_detect 软件/中断控制器识别事件
t_start 处理函数真正开始
t_done 必要处理完成1
2
3
4
2
3
4
响应延迟是 t_start-t_event,完成时间还包含执行和抢占。轮询的最坏检测延迟受循环周期影响;中断减少主动轮询,但仍有屏蔽窗口、高优先级中断、指令边界和现场保存开销。
修改低优先级 ISR、高优先级 ISR 和临界区时间,观察 1 ms 截止期是否仍满足。不要只看平均值,要寻找最坏叠加。
ISR 应做多少工作
ISR 需要确认来源、获取必要快照、清除/确认事件并把后续工作移交主循环或任务。过长 ISR 会阻塞同级/低级事件;过早清标志可能丢上下文,过晚清除可能重复进入。确切顺序取决于外设手册。
共享数据不是加 volatile 就结束
主循环与 ISR 并发访问多字节状态时,可能在更新一半时被抢占。需要根据对象选择:原子访问、短临界区、单生产者环形缓冲、消息队列或版本化快照。临界区虽然保护一致性,也会增加中断延迟。
常见误解
- 中断一定比轮询快;高频简单事件可能让中断开销更大;
- 优先级越高越安全;错误高优先级会饿死关键路径;
- ISR 里不能调用任何函数;真正约束是可重入性、阻塞、栈和最坏执行时间;
- 清除中断标志只是一行模板;不同外设可能读清、写一清零或要求特定顺序。
下一步:定时器、DMA 与截止期。