ARM核的异常处理
-ARM核的8种异常源
-reset--复位异常
描述:在内核复位时执行
优先级:1级
模式:SVC(管理模式)
-undefined instruction--未定义指令异常
描述:流水线执行非法指令产生,该异常发生在流水线译码阶段,如果当前指令不能被识别为有效指令,将会出现此类异常
优先级:6级
模式:UDF(未定义模式)
-SVC,SWI--软中断异常
描述:用于程序触发软件中断执行,该异常是由应用程序自己调用时产生,该异常在管理模式(SVC)下运行
优先级:6级
模式:SVC(管理模式)
-prefetch abort--预取指令中止异常
描述:当一条指令从内存种取出时由于某些原因失败,且如果它能到达执行状态将会触发此异常
优先级:5级
模式:ABT(终止模式)
-Data Abort--数据访问中止异常
描述:如果一个预取指令试图存取一个不存在或违法的内存单元,将会触发此异常
优先级:5级
模式:ABT(终止模式)
-FIQ与IRQ
FIQ:一般中断异常;优先级为3级;异常工作模式为FIQ(快中断模式)
IRQ:快速中断异常;优先级为4级;异常工作模式为IRQ(慢中断模式)
-FIQ较IRQ快的原因:
一、FIQ在异常向量表位于最末
1.所以可以直接把异常处理程序写在异常向量表之后,省去了跳转的过程
2.而IRQ需要执行向量表对应的跳转指令后,跳转到指定的中断处理程序
二、FIQ模式有5个私有寄存器(R8-R12)
1.执行中断处理程序前无需压栈保存寄存器,可直接处理中断
2.而IRQ的R8-R12寄存器是与和其它模式共用的,在中断前需要保护现场,即把R8-R12的数据保存到栈中
三、FIQ的优先级高于IRQ
1.俩个中断同时发生时先响应FIQ
2.FIQ可以打断IRQ,IRQ不能打断FIQ
ARM核异常处理过程
异常产生,ARM核自动做的事情:
1.拷贝CPSR到SPSR
2.修改CPSR
①改变处理器状态进入ARM态
②改变处理器模式进入相应的异常模式
③设置中断禁止位禁止相应中断
3.保存返回地址当前PC到LR
4.将PC设置到异常向量表相应位置
异常产生之前,需要做的事情:
1.设置异常向量表
2.告诉ARM核异常向量表的基地址
3.编写异常处理函数
①设置SP寄存器
②将通用的寄存器(r0-r12)进行压栈保护
③异常处理
④异常返回