1. ARM中断现场保护与恢复的核心概念
中断处理是嵌入式系统开发中最基础也最重要的机制之一。当ARM处理器正在执行用户程序时,突然来了一个外部中断信号,CPU必须立即停下手中的工作,转去处理这个紧急事件。这就好比你在专心写代码时突然接到一个重要电话,你需要先记住当前写到的位置(保存现场),接完电话后再回来继续写代码(恢复现场)。
在ARM架构中,中断现场保护指的是在进入中断处理程序前,将当前任务的执行环境完整保存下来,包括所有通用寄存器、程序计数器PC、程序状态寄存器CPSR等。恢复现场则是中断处理完成后,将这些保存的值重新加载到寄存器中,让被中断的任务能够无缝衔接继续执行。
我刚开始接触ARM中断处理时,最容易混淆的就是不同模式下的寄存器备份。ARM处理器有7种运行模式,每种模式都有自己独立的SP和LR寄存器。当中断发生时,处理器会自动切换到IRQ模式,这时使用的SP和LR已经是IRQ模式下的专用寄存器了,这为现场保护提供了硬件层面的支持。
2. 中断向量表与异常处理入口
ARM处理器的中断处理始于中断向量表,这是一个位于特定内存地址的跳转指令表。当发生中断时,CPU会根据中断类型自动跳转到向量表中对应的地址。在Linux内核中,这个过程的实现非常精巧。
看看这段实际的汇编代码,来自Linux内核的entry-armv.S文件:
.section .vectors, "ax", %progbits
.L__vectors_start:
W(b) vector_rst
W(b) vector_und
W(ldr) pc, .L__vectors_start + 0x1000
W(b) vector_pabt
W(b) vector_dabt
W(b) vector_addrexcptn
W(b) vector_irq
W(b) vector_fiq
这段代码定义了各种异常的处理入口。当发生IRQ中断时,CPU会跳转到vector_i


418

被折叠的 条评论
为什么被折叠?



