热门关键字:  ubuntu  分区  函数  Fedora  linux系统进程

ARM的异常处理

来源: 作者: 时间:2007-12-21 Tag: 点击:

对于ARM核,可以且只能识别7种处理器异常,每种异常都对应一种ARM处理器模式,当发生异常时,ARM处理器就切换到相应的异常模式,并调用异常处理程序进行处理。

ARM核异常处理的一般过程是:

(1)保存异常返回地址到r14_<exception_mode>(确切的说是当前PC);

(2)保存当前CPSR到SPSR_<exception_mode>;

(3)改写CPSR以切换到相应的异常模式和处理器状态(ARM状态);

(4)禁止IRQ(如果进入FIQ则禁止FIQ);

(5)跳转到相应异常向量表入口(例如IRQ跳转到IRQ_Handler入口);

【注】复位异常处理会禁止所有中断,另外由于不用返回,因此不需要作(1)(2)步。



上面的异常处理操作都是由ARM核硬件逻辑自动完成的,软件则需要完成以下工作:

(1)为ARM核建立异常向量表。ARM体系结构中定义了各种异常的入口地址,例如复位异常的入口地址为0x0,发生复位时,ARM核自动跳转到0x0处开始执行。因此,需要在各入口地址处放一条跳转指令,跳转到相应的异常处理服务程序。因此,异常向量表就是从0x0地址开始的8个字(除了7条跳转到上述异常处理程序的跳转指令外,还有一个保留字)。

(2)为各种处理器模式设置堆栈:由于异常处理程序中需要用到通用寄存器,因此,进入异常时,应该保存要使用的寄存器,保存方法是将其压入本异常模式下的堆栈,异常处理完毕后返回时,从堆栈中恢复通用寄存器的值。

最新评论共有 4 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册