1. ARM Cortex-M 异常与中断机制解析
在嵌入式系统开发中,异常和中断处理是RTOS和裸机程序的核心基础。Cortex-M系列处理器作为ARM架构中面向微控制器的主力产品线,其异常与中断机制经过精心设计,既保持了ARM架构的优雅性,又针对实时嵌入式场景做了大量优化。我曾在多个工业控制项目中深度使用过Cortex-M3/M4内核,今天就来拆解这套机制的技术细节。
与通用处理器不同,Cortex-M的中断控制器(NVIC)直接集成在处理器内核中,这种紧耦合设计使得中断响应延迟可以低至12个时钟周期。同时,异常处理采用统一的优先级模型,硬件自动完成上下文保存,这些特性使其特别适合实时性要求严苛的场合。理解这套机制,是写出高效可靠嵌入式代码的前提。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 异常与中断的基本概念
2.1 异常类型全解析
Cortex-M的异常分为两大类:系统异常和外部中断。系统异常由内核自身触发,编号1-15是保留的固定用途:
- 复位(1):上电或硬件复位
- NMI(2):不可屏蔽中断(如看门狗超时)
- HardFault(3):所有错误处理的最后防线
- MemManage(4):内存保护违规
- BusFault(5):总线访问错误
- UsageFault(6):非法指令等执行错误
- SVCall(11):SVC指令触发的系统调用
- PendSV(14):可挂起的系统服务请求
- SysTick(15):系统节拍定时器中断
外部中断则通过NVIC管理,编号从16开始。以STM32F4为例,其IRQ编号16-81对应芯片具体的物理中断源。不同厂商芯片的外部中断数量差异较大,需查阅具体手册。
2.2 中断与异常的区别本质
虽然术语上常混用,但严格来说:
- 中断(Interrupt)特指由外设触发的外部事件
- 异常(Exception)包含中断和内核产生的内部事件
关键区别在于触发源:
- 异常可能由程序错误触发(如除零)
- 中断总是由硬件信号异步触发
但在处理机制上,Cortex-M对两者使用相同的优先级管理和响应流程。
3. NVIC中断控制器深度剖析
3.1 优先级分组机制
NVIC采用4位优先级配置,但通过优先级分组寄存器(AIRCR.PRIGROUP)可灵活划分抢占优先级和子优先级:
