STM32F4中IRQa与IRQb抢占、子优先级均相同时的执行顺序问题
关于NVIC中断优先级相同的问题解答
咱针对这两个问题逐一拆解,都是基于ARM Cortex-M系列常用的NVIC(嵌套向量中断控制器)场景哈:
1. 若IRQa与IRQb的抢占优先级和子优先级均相同,会出现什么情况?
当两个中断的抢占优先级(Preempt Priority)和子优先级(Sub Priority)完全一致时,有两个核心表现:
- 无法抢占当前服务的中断:因为抢占优先级相同,NVIC不会允许新触发的同优先级中断打断正在执行的中断服务程序(ISR),必须等当前ISR执行完毕,或者主动挂起后,才会处理另一个中断。
- 同时触发时按硬件IRQ编号排序:如果两个中断在同一时刻触发,NVIC会根据它们的硬件IRQ编号来决定响应顺序——编号更小的中断会被优先服务。这是硬件层面固有的排序逻辑,优先级配置相同的时候就靠这个来区分先后。
2. 假设配置为第1行(IRQa, 0, 0)、第2行(IRQb, 0, 0),哪个中断会先被服务?
答案还是要看IRQ的硬件编号:
- 如果IRQa的硬件编号比IRQb小,那IRQa会先被NVIC响应并服务;
- 反之,如果IRQb的编号更小,那它会优先得到处理。
毕竟两者的抢占优先级和子优先级都设成了(0,0),完全没有配置层面的优先级差异,NVIC只能依靠硬件本身给每个中断分配的固有编号来排序——编号越小,在同配置优先级下的“隐性优先级”越高。
内容的提问来源于stack exchange,提问作者Sarthak Sharma
相关产品推荐
相关产品推荐

