2. 中断基础与航电场景映射

中断是航电计算平台中最基础的异步事件处理机制。它的本质是:当某个外部设备或内部模块产生需要CPU立即关注的事件时,硬件向处理器发出请求信号,处理器暂停当前正在执行的指令流,保存现场,跳转到预先注册的中断服务程序(ISR)执行处理,完成后恢复现场并返回原程序继续执行。理解中断,关键要抓住三个要素:中断源(谁触发)、优先级(谁先被响应)、嵌套(处理中能否被更高优先级打断)。

中断源分类

航电平台的中断源通常按来源分为三类。第一类是外部设备中断,如ARINC 429接收通道收到新字、1553B总线消息结束、离散量输入跳变、GPS秒脉冲到达等,这类中断由外设通过中断控制器(如GIC或APIC)上报。第二类是内部异常,包括除零、非法指令、内存访问越界、看门狗超时等,它们由CPU内部产生,通常不可屏蔽或具有最高优先级。第三类是软件中断,由程序执行特定指令(如ARM的SVC、x86的INT n)主动触发,常用于系统调用或任务间同步。

在航电场景中,中断源还可以按时间特性重新映射:周期中断来自定时器,事件中断来自总线或传感器,故障中断来自BIT(内建测试)或健康监控模块。这种映射直接决定了ISR的设计策略。

中断优先级与嵌套

当多个中断同时到达时,中断控制器根据优先级决定响应顺序。优先级通常用数值表示,数值越小优先级越高(ARM GIC约定),或数值越大优先级越高(部分x86约定),设计时必须先明确参照约定。航电系统中,故障中断通常配置为最高优先级,周期中断次之,事件中断最低,以保证安全关键事件不被延迟。

中断嵌套是指高优先级中断可以打断正在执行的低优先级ISR。嵌套深度受栈空间和中断控制器配置限制。例如,若每个ISR使用512字节栈,嵌套4层就需要2KB中断栈,这在资源受限的航电模块中必须提前核算。嵌套的另一个风险是优先级反转:低优先级ISR持有共享资源时被中优先级中断打断,导致高优先级任务等待。解决方案包括在ISR中关中断保护临界区,或使用优先级继承机制。

航电中断源分类与优先级映射 外部设备中断 ARINC 429 接收 1553B 消息结束 离散量输入跳变 GPS 秒脉冲 以太网帧到达 经中断控制器上报 内部异常 除零 / 非法指令 内存访问越界 看门狗超时 ECC 纠错错误 总线错误 CPU 内部产生,不可屏蔽 航电场景映射 周期中断(定时器) 事件中断(总线/传感器) 故障中断(BIT/健康监控) 按时间特性重新归类 优先级排序(数值小=高) P0 故障中断 最高,不可延迟 P1 周期中断 严格时间约束 P2 事件中断 可容忍一定延迟 P3 软件中断 系统调用/同步 嵌套规则:高优先级可打断低优先级 同优先级不可嵌套 嵌套深度受栈空间限制 示例:P0故障中断可打断P1周期ISR,P1可打断P2事件ISR,形成嵌套

航电任务中的三类中断

周期中断由硬件定时器按固定周期产生,是航电任务调度的时基。例如,某飞控计算机配置1ms周期中断,ISR中执行传感器采样、控制律计算和作动器输出。周期中断的抖动(jitter)直接影响控制品质,因此其ISR必须尽可能短,通常只做数据搬运和标志置位,复杂计算放到任务上下文中执行。

事件中断由外部事件触发,具有随机性。典型场景是ARINC 429接收中断:当接收通道收到完整32位字时触发,ISR读取数据寄存器并写入环形缓冲区,同时更新写指针。事件中断的ISR设计要点是快进快出,避免在ISR中做协议解析或内存分配。

故障中断由BIT或健康监控模块产生,优先级最高。例如,电源模块检测到电压跌落、CPU温度超过阈值、内存ECC不可纠正错误等,都会触发故障中断。故障中断的ISR通常执行紧急降级操作:关闭非关键外设、切换备份通道、记录故障码到非易失存储器,并通知健康管理任务。

中断服务程序的设计约束

在航电计算平台中,ISR必须满足确定性要求。以下是一组典型约束,可作为设计检查依据:

约束项典型值/要求说明
ISR最大执行时间≤ 50 μs超过则影响同优先级中断响应
中断关闭时间≤ 10 μs临界区保护,影响所有中断延迟
嵌套深度≤ 4 层受中断栈大小限制
中断栈大小≥ 2 KB每层512B × 4层
ISR中禁止操作动态内存分配、阻塞等待、浮点运算避免不确定延迟

注意:中断优先级数值约定因处理器架构而异。ARM Cortex-A系列GIC中,优先级数值越小优先级越高;而部分x86 APIC实现中数值越大优先级越高。在跨平台移植或阅读芯片手册时,必须先确认当前平台的优先级数值约定,否则可能导致故障中断被事件中断抢占的严重错误。

中断嵌套的栈空间核算示例

假设某航电模块使用ARM Cortex-R52,中断栈配置为2KB。每个ISR保存现场需要压栈16个通用寄存器(64字节)、程序状态寄存器(8字节)、返回地址(8字节),加上ISR内部局部变量和函数调用开销,单层中断约消耗400字节。若允许4层嵌套,则最大栈需求为400×4=1600字节,小于2KB,满足要求。若嵌套深度增加到6层,则需2400字节,超出栈空间,会导致栈溢出和不可预测行为。因此,嵌套深度必须与栈空间匹配核算。

中断嵌套的另一个实践要点是中断屏蔽策略。在ISR中操作共享数据结构时,通常需要短暂关闭中断(或关闭低于当前优先级的中断)。关闭时间必须严格控制,因为关闭期间所有被屏蔽的中断都会延迟响应。例如,若关闭中断10μs,而周期中断周期为1ms,则最坏情况下周期中断延迟10μs,占周期的1%,通常可接受;但若关闭中断100μs,则延迟占比10%,可能影响控制律的实时性。

从定义到航电映射的完整链路

总结本节的核心逻辑:中断定义给出了“暂停-处理-恢复”的基本模型;中断源分类区分了外部设备、内部异常和软件中断;优先级决定了多个中断同时到达时的响应顺序;嵌套允许高优先级中断打断低优先级ISR。在航电场景中,这三类中断源被重新映射为周期中断、事件中断和故障中断,分别对应时间驱动、事件驱动和安全关键驱动三种处理策略。设计者需要根据任务的时间约束、安全等级和资源预算,为每类中断分配合适的优先级、栈空间和ISR执行时间预算,并通过静态分析和运行时监控验证其确定性。

实践建议:在航电中断设计中,建议为每个中断源建立一张“中断配置表”,记录中断号、优先级、触发方式(边沿/电平)、ISR入口地址、最大执行时间、栈需求和共享资源列表。该表可作为代码生成、静态分析和测试用例设计的统一输入,避免配置分散导致的不一致。