FIRMWARE · 中断机制
这是嵌入式岗位非常典型的开场题,考的是实时性意识,而不是会不会写一个中断函数。
先给结论
轮询是CPU主动检查事件;中断是事件触发CPU暂时转去处理。ISR应尽量短、可预测,把复杂操作交给主循环或任务处理;忙等延时通常不适合放在中断里。
① 面试官到底在考什么?
面试官通常会追问串口、按键、定时器为什么常用中断;如果候选人回答“实时性高”,下一问就是中断优先级、共享变量与中断嵌套。

② 工程思路:按这个顺序展开
01 / 先比较轮询与中断
轮询实现简单但检查频率受主循环影响;中断适合需要及时响应或异步到来的事件,但也会产生进入/退出和抢占开销。
02 / 把ISR职责界定清楚
通常先读取状态、清除或确认中断源、读取/写入必要寄存器,再把数据写入缓冲区或设置任务标志。不要在ISR里做大量打印、长时间等待或依赖其他上下文才能完成的阻塞操作。
03 / 说出验证办法
通过GPIO打点加示波器/逻辑分析仪测中断延迟与ISR执行时间,再检查较高优先级中断到来时是否影响其他关键任务。
③ 常见失分点
说“中断永远比轮询效率高”,忽略高频中断风暴的成本
在ISR中执行HAL_Delay之类依赖系统tick的等待,却没有考虑时基是否仍可前进
ISR和主程序共享变量不做同步与原子性分析
④ 面试时可以这样回答
“中断适合异步事件和有响应时间要求的场景,轮询适合简单且时序可控的任务。我的中断服务程序会尽量短,完成寄存器处理和必要的数据搬运,后续耗时工作放到主循环或RTOS任务。是否满足实时性,我会通过打点测中断响应与执行时间验证。”
面试官可能继续追问
如果UART接收中断频率很高,怎样改成DMA加环形缓冲?

扫码关注






























