1. 中断的本质:嵌入式系统应对异步事件的核心机制
中断不是一种“高级技巧”,而是嵌入式系统得以在资源受限条件下可靠运行的底层基石。它解决的根本问题是:如何让一个单线程、顺序执行的处理器,能够及时响应外部世界不可预测的、时间敏感的事件。这与人类处理突发事件的方式高度一致——暂停当前任务、保存现场、转去处理紧急事务、恢复原任务继续执行。但嵌入式系统的实现远比生活类比更精密、更依赖硬件与软件的协同设计。
理解中断,必须从其物理本质出发。在STM32中,中断并非由软件凭空生成,而是由芯片内部或外部的特定硬件信号触发。这些信号源被称为中断源(Interrupt Source),例如:USART接收数据寄存器非空(RXNE)、定时器计数溢出(UPDATE)、外部引脚电平变化(EXTI)、ADC转换完成(EOC)等。每一个中断源都对应着一个唯一的中断向量号(Interrupt Vector Number),这个编号是硬件固化、不可更改的,它决定了当该中断发生时,CPU将跳转到哪个固定的内存地址去执行代码。
关键在于,中断的发生是完全异步的。它不等待主程序的指令,也不受主循环(while(1))的控制。一个外部按键可能在任何一条指令执行的中间被按下,一个串口数据可能在你正在计算一个浮点数时抵达。这种不确定性要求系统必须具备一种“打断-保存-跳转-执行-返回”的原子能力。这个能力由CPU内核(Cortex-M系列)和嵌套向量中断控制器(NVIC, Nested Vecto