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中关中断保护临界区,或使用优先级继承机制。
航电任务中的三类中断
周期中断由硬件定时器按固定周期产生,是航电任务调度的时基。例如,某飞控计算机配置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入口地址、最大执行时间、栈需求和共享资源列表。该表可作为代码生成、静态分析和测试用例设计的统一输入,避免配置分散导致的不一致。