【CortexM】咬尾中断

一、咬尾中断

咬尾中断是 Cortex-M 处理器中由 NVIC (嵌套向量中断控制器) 实现的一种高效中断处理机制,允许在一个中断服务程序 (ISR) 执行完毕后立即处理下一个挂起的中断,无需执行完整的出栈和再次入栈操作,从而显著减少中断切换延迟。

二、工作原理

1. 常规中断处理流程

  • 入栈:硬件自动保存 8 个关键寄存器 (XPSR, PC, LR, R12, R3-R0) 到堆栈
  • 取向量:从向量表获取 ISR 入口地址
  • 执行 ISR:处理中断服务
  • 出栈:恢复之前保存的寄存器
  • 返回:回到被中断的程序

2. 咬尾中断工作流程

当一个中断 (ISR1) 执行完毕且存在挂起的另一中断 (ISR2) 时:

  • 跳过出栈:不执行 ISR1 的寄存器出栈操作
  • 直接跳转:NVIC 强制 CPU 直接跳转到 ISR2 的入口
  • 复用栈帧:ISR2 直接使用 ISR1 已经压入栈中的寄存器值
  • 执行 ISR2:处理完后,执行一次统一的出栈返回

三、触发条件

咬尾中断在以下两种情况下触发:

  1. 连续中断处理:当一个中断处理完毕后,立即有另一个优先级不高于当前中断的中断处于挂起状态
  2. 中断嵌套后的返回:在高优先级中断 (ISR2) 抢占低优先级中断 (ISR1) 后,ISR2 执行完毕返回时,会以咬尾方式直接执行被挂起的 ISR1,而无需先完全返回主程序再重新响应 ISR1

性能优势

连续中断间延迟

约 30 个时钟周期

仅 6 个时钟周期

减少约 80%

中断响应时间

12 个时钟周期

12 个时钟周期 (首次)

首次响应不变

堆栈操作

两次完整压栈 / 出栈

一次压栈、一次出栈

减少 50% 堆栈操作

实际应用延迟

基准值

降低约 70%

显著提升实时性能

原理:通过省略一次完整的 8 个寄存器压栈 / 出栈操作(共 16 次内存访问),节省大量 CPU 时间,特别适合处理密集中断的实时系统。

CortexM 文章被收录于专栏

cortexm相关

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务