ARM异常处理方式

ARM的异常处理方式

ARM的异常处理方式常会在面试中遇见,今天本人自我总结了ARM处理异常时所需要的基本知识点的总结~

几个重要的寄存器
对于异常处理方式首先需要弄清出ARM的37个通用寄存器中的几个重要寄存器
(1)CPSR:又称为程序状态寄存器,内部的bit位都有各自的含义,CPSR在七个不同模式下只有一个
bit0~bit4:模式位,表示处理器模式
bit5:T位,0表示在ARM模式下,1表示在Thumb 状态
bit6~bit7:中断禁止位,bit6为1表示禁止FIQ,bit7为1表示禁止IRQ
bit8~bit23:Undef未定义
bit28~bit31:此四个bit为条件位,与汇编指令有关
(2)PC:程序控制寄存器,简单来说就是PC指向哪里,程序就执行在哪里,PC在七个不同模式下只有一个
(3)SP:栈寄存器,不同的处理器模式下有各自的SP栈指针
(4)LR:用来保存不同模式下切换时的程序的返回地址
(5)SPSR:用来保存CPSR的值,当切换模式时,保存当前模式下的CPSR状态

处理器模式
ARM的异常处理也与处理器模式有关,ARM为了给OS提供安全等级,帮助OS实现权限管控等,ARM实现了七种不同的工作模式,这七个工作模式分成一个用户模式和六个特权模式,特权模式下分成五个异常模式
普通模式:
User:唯一的普通模式,应用层都在此模式下运行
特权模式:
FIQ:高优先级中断产生时将会进入此模式下
IRQ:低优先级中断产生时将会进入此模式下
Supervisor:系统复位或者软中断指令执行时进入此模式(整个uboot都在SVC此模式下,uboot在运行表示系统正在复位)
Abort:存取异常时进入此模式(内存读取失败等)
Undef:执行为定义指令时进入此模式
以上为五个异常模式
System:OS运行在此模式下,此模式下权限最高

异常向量表
异常向量表是硬件向软件提供的处理异常的支持,所有的CPU都有异常向量表,这是CPU设计时就设定好的,是硬件决定的。当异常发生时,CPU会自动动作(PC跳转到异常向量处处理异常,有时伴有一些辅助动作)到对应的异常向量表表项中去,每个表项都为四个字节的内存地址,内部存储以设定好的ISR异常处理程序的指针,不同的表项对应不同的处理器模式。

ARM的异常处理过程
当异常产生时ARM处理器会自动进行以下动作:
(1)复制CPSR的状态到SPSR中,以保存当前模式状态
(2)在CPSR中设置发生相应异常的模式位(bit0~bit4),也就是处理器模式
(3)改变CPSR中处理器的状态使其进入ARM态(bit5)下(在thumb状态下不支持异常处理)
(4)如果需要可以设置中断禁止(),以防止中断嵌套(bit6~bit7)
(5)保存返回地址到LR寄存器中
(6)将PC指向相应的异常向量表所在的地址
当异常完成后:
(1)从SPSR中恢复CPSR到异常前的状态
(2)从LR寄存器中恢复PC之前运行的工作地址

以上都为本人自我总结,如有错误,愿指正,不胜感激!

发布了2 篇原创文章 · 获赞 0 · 访问量 14

猜你喜欢

转载自blog.csdn.net/weixin_45501293/article/details/105085622