ARM异常处理

华清资料整理

异常

  • 定义:处理器在正常执行程序的过程中可能会遇到一些不正常的事件发生,这时处理器就要将当前的程序暂停下来转而去处理这个异常的事件,异常事件处理完成之后再返回到被异常打断的点继续执行程序。
  • 处理机制:保存当前状态,切换到异常处理模式,调用对应的异常处理函数,恢复之前的状态
  • 异常源和异常模式
    ARM异常处理_第1张图片

异常响应

ARM产生异常后的动作(自动完成)

  • 1.拷贝CPSR中的内容到对应异常模式下的SPSR_<mode> 保存当前状态
  • 2.切换模式:即修改CPSR中的bit[4:0]位
    修改FIQ IRQ使能状态
    切换成ARM指令集
  • 3.记录下一条指令的位置到LP指针
  • 4.修改PC指针为对应异常模式地址:即异常向量表中对应异常的地址

异常向量表

  • 本质是存在内存中的一段代码
  • 每种异常都只有4个字节的空间
  • 遇到异常时,pc会自动修改为对应异常在内存种的地址
  • ARM的异常向量表默认在0x00位置,但是可以通过配置协处理器来修改器地址
  • 注意:异常真正的处理函数并不在此,异常向量表中对应的异常只有4字节的空间,一般放不下异常处理函数,因此异常向量表中一般存放的是一个跳转指令,让pc跳转至真正的异常处理函数的位置。
  • ARM异常处理_第2张图片

异常返回

当异常处理函数执行完毕后的操作

  • 将spsr中的状态恢复到cpsr中
  • MOV PC,LR 这个操作需要自己完成(汇编需要自己完成,c语言会帮你添加)

异常的优先级

ARM异常处理_第3张图片
高优先级可以打断低优先级,例如进入了FIQ中断模式,按复位键,系统复位

FIQ为什么比IRQ更快

ARM异常处理_第4张图片

你可能感兴趣的:(ARM,arm开发)