一、
arm的七种异常源
1)FIQ 硬件请求的快速中断
2)IRQ 硬件请求的外部中断
3)RESET 复位按键
4)software interrupe 执行程序时产生的中断
5)DATA Abort 数据访问异常(变量地址不对或不允许被访问)
6)prefetch Abort 读取指令的时候异常(指令不允许访问或其他问题)
7)undefined instruction 已经读取到指令但是这个指令CPU不认识
七种异常源对应进入的模式
异常处理、
二、
ARM产生异常后的动作(arm 自己会做,不需要我们做,我们了解arm是怎么做的)
1)将CPSR的的内容拷贝 到对应异常模式下的SPSR_mod中
/CPSR是当前状态寄存器 保存着当前处理器遇到异常前的状态
保存在SPSR中,方便跳转之后回到正常的的工作状态(mod 为对应的异常模式eg :SPSR_fiq)/
2,修改CPSR的值
1)、修改中断禁止为禁止相应中断(不再响应同等优先级或低优先级的中断请求)设置位为图中I 位或F位
2)、修改模式位进入对应的模式状态(修改位数为M0~M4)
3)、修改状态位为arm状态(无论之前为什么状态ARM或thumb 执行异常必须进入ARM状态)
3、
保存返回地址到对应模式下的LR_mode(异常出现时LR自动保存当前程序的下一段的地址)//LR 就是R14
4、
设置PC的值让它跳到相应的异常向量表中。(异常向量表)
//异常向量表(32Baty//每个异常4字节)
2、异常返回
异常返回不像异常处理一样处理器自己完成,异常返回需要自己手动完成
首先异常处理程序的自己写
CPSR=SPSR;
PC=LR;
3、
异常优先级
reset(复位)
data abort (数据读取异常)
FIQ(快速中断)
IRQ(外部中断)
prefetch abort (指令读取异常)
software interrupt(软中断)
undefine instruction (指令未定义)
三、指令流水线、多核、时间片。