1. 中断基础概念:中断向量、中断优先级、中断嵌套、中断延迟的定义与测量方法

中断是嵌入式实时系统的核心机制,它允许CPU暂停当前任务,立即响应外部或内部事件。理解中断的底层概念是进行中断线程化移植与抢占临界区优化的前提。本节将系统梳理中断向量、中断优先级、中断嵌套及中断延迟的定义与测量方法。

1.1 中断向量

中断向量是中断服务程序(ISR)入口地址的索引表。每个中断源对应一个唯一的向量号,CPU在响应中断时,通过硬件自动查找向量表,跳转到对应的ISR执行。

关键点:中断向量表通常位于内存的固定基地址(如ARM Cortex-M的0x00000000),向量表包含栈指针初始值和各异常/中断的入口地址。
中断向量表结构示意图 中断向量表基地址(如 0x00000000) 向量0:栈指针 向量1:Reset 向量2:NMI 向量3:HardFault ... 向量16:TIM0 向量17:TIM1 向量18:UART0 向量19:SPI0 void TIM0_IRQHandler(void) { /* 处理代码 */ } void TIM1_IRQHandler(void) { /* 处理代码 */ } void UART0_IRQHandler(void) { /* 处理代码 */ }
中断向量表关键字段说明
字段说明典型值
向量号中断源的唯一编号,从0开始0~255
入口地址ISR函数在内存中的起始地址0x08000100
优先级硬件可编程的中断优先级0~15(4位)
使能位控制中断是否被允许触发0/1

1.2 中断优先级

中断优先级决定了当多个中断同时发生时,CPU优先响应哪一个。优先级数值越小,优先级越高(ARM Cortex-M体系)。中断优先级由硬件寄存器控制,支持抢占式调度。

工程实践提示:在RTOS中,中断优先级通常被划分为两个区域:高优先级区域(直接中断,不受OS管理)和低优先级区域(可被OS接管,用于中断线程化)。划分阈值由OS配置决定。
中断优先级层级划分(ARM Cortex-M 示例) 优先级0(最高)— 不可屏蔽中断 / 系统异常 优先级1~3 — 高优先级外设中断(直接中断) 优先级4~7 — 可被OS接管的中断(中断线程化区域) 优先级8~15(最低)— 低优先级中断 / 线程上下文 OS接管阈值 优先级数值越小 → 优先级越高 → 抢占能力越强

1.3 中断嵌套

中断嵌套指一个中断服务程序正在执行时,被另一个更高优先级的中断所打断,CPU暂停当前ISR,转而执行更高优先级的ISR,处理完毕后再恢复原ISR的执行。

注意:过深的中断嵌套会导致栈溢出和延迟抖动。在实时系统中,通常限制嵌套深度不超过3层,或使用中断线程化将大部分中断处理转移到线程上下文。
中断嵌套执行时序图 时间 → 主线程(优先级低) ISR_Low(优先级5) ISR_High(优先级1) ISR_Low恢复 高优先级中断抢占 高优先级ISR返回,恢复低优先级ISR t1 t2 t3 t4 中断嵌套深度 = 同时处于活跃状态的ISR层数(此处深度为2)

1.4 中断延迟

中断延迟(Interrupt Latency)是从硬件中断信号产生到CPU开始执行第一条ISR指令之间的时间间隔。它是衡量实时系统响应能力的关键指标。

中断延迟的组成

中断延迟各阶段时间构成
阶段描述典型时间(CPU周期)
硬件响应时间CPU完成当前指令、识别中断、压栈PC/PSR等12~20 cycles
中断向量查找从向量表读取ISR入口地址2~4 cycles
上下文保存保存被中断任务的寄存器现场10~30 cycles
OS调度延迟(可选)RTOS进行中断接管、调度决策20~100 cycles
ISR入口跳转跳转到ISR函数体2~4 cycles

中断延迟的测量方法

  1. 硬件逻辑分析仪法:将中断请求引脚和CPU的ISR执行指示引脚(如GPIO翻转)接入逻辑分析仪,测量两个信号边沿之间的时间差。
  2. 定时器捕获法:使用定时器捕获中断触发时刻,在ISR入口处读取定时器值,计算差值。
  3. RTOS内置测量:许多RTOS(如FreeRTOS、RT-Thread)提供中断延迟测量钩子函数,自动记录最大/最小延迟。
测量代码示例(定时器捕获法):
/* 中断延迟测量示例 - 基于硬件定时器 */
static uint32_t irq_latency_max = 0;
static uint32_t irq_latency_min = 0xFFFFFFFF;

void EXTI0_IRQHandler(void)
{
    uint32_t enter_time = TIM2->CNT;  /* 读取当前定时器计数值 */
    uint32_t latency;
    
    /* 计算延迟:假设中断触发时定时器值被硬件锁存到寄存器 */
    latency = enter_time - trigger_timestamp;
    
    /* 更新最大/最小延迟 */
    if (latency > irq_latency_max) {
        irq_latency_max = latency;
    }
    if (latency < irq_latency_min) {
        irq_latency_min = latency;
    }
    
    /* 实际中断处理逻辑 */
    /* ... */
    
    /* 清除中断标志 */
    EXTI->PR = (1 << 0);
}
中断延迟测量原理图 中断信号触发 中断延迟区间 ISR第一条指令 中断延迟 = 硬件响应 + 向量查找 + 上下文保存 + OS调度延迟 + 跳转开销 典型范围:20 ~ 200 CPU周期(取决于CPU架构和OS复杂度) 实时系统要求:通常 < 10μs(硬实时)或 < 100μs(软实时)

1.5 概念对比与工程意义

中断核心概念对比表
概念定义工程影响优化方向
中断向量ISR入口地址索引表向量表错误导致系统崩溃向量表重定向、RAM中动态更新
中断优先级中断响应顺序的硬件等级优先级设置不当导致死锁合理划分OS接管阈值
中断嵌套高优先级ISR抢占低优先级ISR嵌套过深导致栈溢出、延迟抖动限制嵌套深度、使用中断线程化
中断延迟从触发到ISR执行的时间直接影响系统实时性减少临界区长度、优化上下文切换