关于Cortex-M执行高优先级故障处理时低优先级外设中断行为的问询
Cortex-M执行高优先级故障处理程序时遇到低优先级外设中断的行为分析
核心结论
低优先级外设中断会被挂起(Pending),既不会被直接忽略,也不会触发硬故障,待故障处理程序执行完毕后才会被响应。
详细机制说明
优先级层级规则
Cortex-M架构中,系统故障类异常(如HardFault、MemManage、BusFault等)的优先级为负数,属于最高优先级梯队;所有外设中断的优先级均为非负数,优先级低于故障类异常。硬件会严格按照优先级高低调度异常/中断的执行。当前异常执行时的中断处理逻辑
当CPU进入高优先级故障处理程序时,硬件会自动锁定当前的优先级状态:
- 低优先级的外设中断无法抢占正在执行的高优先级故障流程,会被标记为挂起状态;
- 这类中断不会触发新的硬故障,因为它的优先级未达到抢占当前异常的要求,也不属于故障触发条件。
- 后续处理流程
只有当故障处理程序执行完成,CPU退出异常处理流程并恢复全局中断的使能状态后,才会检查挂起的中断队列,按优先级依次处理被挂起的外设中断。
注意:如果在故障处理程序中人为修改
FAULTMASK或PRIMASK寄存器(主动降低中断屏蔽级别),低优先级外设中断可能会被提前响应,但这属于非常规操作,可能引发异常嵌套风险,不推荐在故障处理流程中这么做。
内容的提问来源于stack exchange,提问作者rand0m_scr1pt_k1dd1e
相关产品推荐
相关产品推荐

