华清资料整理
异常
- 定义:处理器在正常执行程序的过程中可能会遇到一些不正常的事件发生,这时处理器就要将当前的程序暂停下来转而去处理这个异常的事件,异常事件处理完成之后再返回到被异常打断的点继续执行程序。
- 处理机制:保存当前状态,切换到异常处理模式,调用对应的异常处理函数,恢复之前的状态
- 异常源和异常模式
异常响应
ARM产生异常后的动作(自动完成)
- 1.拷贝CPSR中的内容到对应异常模式下的SPSR_<mode> 保存当前状态
- 2.切换模式:即修改CPSR中的bit[4:0]位
修改FIQ IRQ使能状态
切换成ARM指令集 - 3.记录下一条指令的位置到LP指针
- 4.修改PC指针为对应异常模式地址:即异常向量表中对应异常的地址
异常向量表
- 本质是存在内存中的一段代码
- 每种异常都只有4个字节的空间
- 遇到异常时,pc会自动修改为对应异常在内存种的地址
- ARM的异常向量表默认在0x00位置,但是可以通过配置协处理器来修改器地址
- 注意:异常真正的处理函数并不在此,异常向量表中对应的异常只有4字节的空间,一般放不下异常处理函数,因此异常向量表中一般存放的是一个跳转指令,让pc跳转至真正的异常处理函数的位置。
异常返回
当异常处理函数执行完毕后的操作
- 将spsr中的状态恢复到cpsr中
- MOV PC,LR 这个操作需要自己完成(汇编需要自己完成,c语言会帮你添加)
异常的优先级
高优先级可以打断低优先级,例如进入了FIQ中断模式,按复位键,系统复位