INTERVIEW PLAYBOOK / 03 · 嵌入式单片机
“USART中断能不能打断TIM定时器中断?”在STM32面试里,面试官常接着问NVIC优先级分组与中断嵌套规则。
30秒回答
在常见Cortex-M NVIC实现中,数值更小代表更高的逻辑优先级;更高的抢占优先级可以中断正在运行的低抢占优先级ISR。子优先级只在满足相应条件的多个待处理中断之间决定先后顺序,不能靠子优先级实现嵌套抢占。具体有效优先级位数与分组应查目标芯片手册。

面试官继续追问:从原理到工程验证
01先从抢占与子优先级讲清楚
如果某定时器中断的抢占级别高于UART,定时器在满足屏蔽条件时可以打断UART中断。若两者抢占级别相同,仅靠子优先级大小,通常不会在一个ISR正在执行时发生彼此抢占;当多个中断均待服务时,子优先级才有排序意义。
02为什么优先级“0”反而很高?
NVIC寄存器的优先级编码通常采用数值小优先级高的约定,但具体实现的有效优先级位数、二进制点分组与CMSIS/HAL配置接口的数值含义必须核对。不要把不同芯片系列的可用优先级数量和配置范围视为完全相同。
03中断优先级不是越高越好
ISR执行时间过长会影响低优先级任务的响应,频繁嵌套也会增加栈使用。关键中断应短小,避免长时间阻塞和大量串口打印。使用FreeRTOS时,能够调用特定RTOS ISR API的中断还受到其配置最大系统调用中断优先级的约束。
04现场排查中断不按预期执行
先用CubeMX或寄存器确认NVIC使能与分组,再看外设中断标志位和屏蔽状态。通过GPIO打点与逻辑分析仪确认中断延迟、嵌套和最长执行时间,并检查关中断临界段是否超出预算。
常见失分点
将子优先级更高理解为一定能抢占正在执行的ISR。
不同芯片工程间复制NVIC优先级配置而不核对有效位数和RTOS限制。
面试官可能再问一句
为什么某个高优先级中断正常进入,却无法安全调用FreeRTOS中的队列发送FromISR接口?
相关高频问答
抢占优先级相同的两个中断会互相打断吗?
一般不会仅因子优先级不同而相互抢占;具体顺序还受挂起状态和异常机制影响。
中断号和优先级数值是一回事吗?
不是。IRQn是中断源编号,NVIC优先级数值表示抢占/排序等级。

扫码关注































