概述
中断延迟表示外部事件发生到 ISR 开始执行之间的时间差,是实时系统关键性能指标之一。
延迟越小且越稳定,系统响应越及时,对外部事件的确定性越高。
在 HRTOS 中,该指标与 调度系统、 中断流程 共同构成完整响应链路。
延迟通常由:硬件响应 + 当前指令执行 + 中断屏蔽 + 上下文保存 + ISR入口开销组成。
工作原理
中断触发后,CPU 完成当前指令并检查屏蔽状态,随后保存上下文并进入 ISR。
ISR 结束后调用 os_interrupt_exit(),由调度器决定是否发生任务切换。
降低中断延迟的关键在于缩短 ISR 执行时间,避免阻塞与长临界区。
关键接口 / 结构
os_interrupt_id() // 获取当前中断编号
os_enter_critical() // 进入临界区(关闭中断)
os_exit_critical() // 退出临界区(恢复中断)
os_in_isr() // 判断当前是否运行在中断上下文中
os_queue_send_from_isr() // 中断中发送邮箱消息
os_event_set_from_isr() // 中断中设置事件标志
os_semaphore_post_from_isr() // 中断中释放信号量
os_msgq_send_from_isr() // 中断中发送消息队列数据
os_schedule_request() // 请求调度器重新调度
os_interrupt_exit() // 完成中断退出
os_enter_critical() // 进入临界区(关闭中断)
os_exit_critical() // 退出临界区(恢复中断)
os_in_isr() // 判断当前是否运行在中断上下文中
os_queue_send_from_isr() // 中断中发送邮箱消息
os_event_set_from_isr() // 中断中设置事件标志
os_semaphore_post_from_isr() // 中断中释放信号量
os_msgq_send_from_isr() // 中断中发送消息队列数据
os_schedule_request() // 请求调度器重新调度
os_interrupt_exit() // 完成中断退出
这些接口覆盖 ISR 中常见操作:状态判断、通信、同步与调度触发。
- 临界区仅用于极短保护窗口
- ISR 内只做必要事件处理
- 退出阶段负责调度检查
运行流程
中断触发 → CPU完成当前指令 → 保存上下文 → 进入ISR → ISR处理 → 退出 → 调度检查 → 任务恢复/切换
扩展说明
中断延迟受硬件与软件共同影响,包括 CPU 架构、总线访问、中断控制器、临界区长度等因素。
优化通常集中在 ISR 设计与系统调度策略上。
- 保持 ISR 极短
- 减少关闭中断时间
- 合理配置中断优先级
- 关注最坏情况延迟(WCIL)
对实时系统而言,最坏情况延迟比平均值更重要。