ARM支持7种类型的异常,它们是:
复位异常
未定义指令异常
软中断指令异常
预取指令异常
数据中止访问异常
中断异常
快速中断异常
ARM异常向量表
当异常发生时,ARM将做如下事情
(1)将异常发生处下条指令地址保存到相应工作模式下LR寄存器中
(2)将CPSR寄存器值复制到相应异常模式下的SPSR寄存器中
(3)切换ARM工作模式
(4)如果异常模式是复位模式或者是快速中断模式,禁止所有快速中断(CPSR[6]=1)
(5)禁止中断CPSR[7]= 1
(6)设置PC寄存器值为相应异常向量地址
我们看ARM异常向量表中,异常向量地址空间大小为4个字节,也就是说这段空间刚好能存放一条ARM指令,所以我们可以在异常这段地址空间中存放一条跳转指令,跳转到我们的异常处理程序中,u-boot中启动代码就是这样做的:
_start: b start_code
复位异常时,跳转到start_code标号处。