中断向量表:CPU的“紧急联系人”名单

短文标题: 中断向量表:CPU的"紧急联系人"名单

【传播知识 手有余香🌹】转发此文到朋友圈 赠送 于振南老师 知识视频合集哦!

你有没有想过一个问题:当中断发生时,CPU怎么知道该跳转到哪个函数?比如USART1中断来了,CPU怎么知道要去USART1_IRQHandler?答案是:查表 。这个表叫中断向量表 。它是一张函数指针数组,存在Flash的开头。每个中断源对应表里的一个条目,存着中断处理函数的地址。中断来了,CPU查表,跳转。

那个"函数指针"的数组, 中断向量表,本质上是一个函数指针数组

typedef void (*pHandler)(void);

pHandler vector_table\[\] = {

(pHandler)0x20001000, // 栈顶地址

Reset_Handler, // 复位

NMI_Handler, // 不可屏蔽中断

HardFault_Handler, // 硬错误

// ...

USART1_IRQHandler, // USART1中断

// ...

};

每个条目是一个函数指针。中断号,就是数组索引。

那个"固定"的位置, 中断向量表固定在Flash的0x08000000 地址(STM32)。上电后,CPU先读第一个字(栈顶地址),再读第二个字(Reset_Handler地址)。然后跳转到Reset_Handler。其他中断也一样------查表,跳转。

那个"弱定义"的默认, 启动文件里,中断处理函数是弱定义(weak)。

__weak void USART1_IRQHandler(void)

{

while(1); // 默认:死循环

}

如果你没写这个函数,链接器就用默认的。如果你写了,链接器用你的。这是"默认实现,可覆盖"的设计模式。那个"重定向"的魔法, 中断向量表可以重定位 (移到RAM)。SCB寄存器里有VTOR(向量表偏移寄存器)。写VTOR,把向量表移到RAM。然后,你可以在运行时动态修改中断处理函数。这是高级玩法。

**那个"调试"的技巧,**调试时,看中断向量表:

  • 查看0x08000000地址的数据
  • 第一个字是栈顶地址
  • 第二个字是Reset_Handler地址
  • 对照数据手册,就知道中断函数在哪

能看懂向量表,是调试高手。那个"保留"的条目, 向量表前16个条目是内核异常 (Reset、NMI、HardFault等)。后面的条目是外设中断 (USART、TIM、EXTI等)。不同型号的STM32,外设中断数量不同。向量表大小,取决于芯片型号。这个故事给我们的启示, 为什么CPU能快速找到中断处理函数?因为有向量表 。中断号 → 表索引 → 函数地址 → 跳转。**查表,比if-else快得多。**这是"用空间换时间"的经典案例。

写在最后, 下次你写中断处理函数,别只管功能。想想那张叫"中断向量表"的名单。它告诉CPU:这个中断来了,去这个函数。没有它,中断不知道往哪跑。


(本文灵感源于于振南《新概念ARM32单片机》教程中对中断向量表的深刻讲解,感谢作者将中断系统的底层机制讲得如此通透。)


如果您觉得这个故事对您有启发,欢迎点赞、转发,让更多工程师看到这个藏在向量表背后的"查表"哲学。关注我,一起探索嵌入式世界里那些"查比判快"的硬核真相。

相关推荐
振南的单片机世界19 小时前
HAL_Delay(1000)真准吗?SysTick的1ms基准从哪来
arm开发·stm32·单片机·嵌入式硬件
NPE~1 天前
[嵌入式]从0到1开发环境搭建
stm32·嵌入式硬件·教程·clion·stmcubemx·stmcubeclt
项目題供诗1 天前
STM32-ADC模数转换器(十八)
stm32·单片机·嵌入式硬件
YYRAN_ZZU1 天前
Ubuntu22.04搭建QEMU嵌入式开发环境全攻略
linux·嵌入式硬件·ubuntu
_YouziTech_1 天前
【STM32】U8G2图形库应用--菜单设计与开发
stm32·单片机·嵌入式硬件·oled·开机动画·图形库
Silicore_Emma1 天前
芯谷科技—D55126 漏电保护器专用集成电路
嵌入式硬件·新能源充电桩·芯谷科技·漏电保护器·高性能cmos漏电保护器·智能断路器/物联网配电·家用漏电保护
国科安芯1 天前
商业航天级抗辐照全双工RS-485/RS-422收发器ASM491S2Y的技术特性与应用研究
运维·网络·单片机·嵌入式硬件·安全·架构·安全性测试
国科安芯1 天前
ASP7A84AS高精度抗辐照线性稳压器技术特性与应用分析
单片机·嵌入式硬件·安全·架构
say_fall1 天前
模拟量输入输出技术超详细知识点总结
linux·开发语言·嵌入式硬件·学习·php
恶魔泡泡糖1 天前
stm32F103C8T6标准库串口发送之发送字节2
stm32·单片机·嵌入式硬件