赞
踩
ARM的异常处理方式简单介绍
---参考朱有鹏大讲坛
1、什么是异常?
正常工作之外的流程都叫做异常。
异常会打断正在执行的工作,并且一般我们希望异常处理完成后继续执行原来的工作。
中断也是异常的一种。
2、CPU 90%的情况都在用户态
它有可能在5种情况下都有可能进行异常的处理。
中断都是不可预知的。
也有一些异常的模式是我们不能执行程序的时候,
所谓的异常,其实也可以理解为不按套路出牌,本来芯片有一段时钟周期,但是你却产生一个信号
让它不按正常的时钟周期走,也就是异步的情况。
3、异常在CPU里面是怎么处理的?
就是通过一个异常向量表的东西。
(1)所有的CPU都有异常向量表,这是CPU设计就设计好的,是硬件本身决定的
(2)当异常发生时,CPU会自动动作(PC跳转到异常向量处,处理异常,有时会有一些辅助动作)
(3)异常向量表是硬件向软件提供的处理异常的支持。
4、程序编写的意义
首先看硬件决定什么东西,然后看软件决定的是什么东西。
一般硬件会留给软件的可操作性。
CPU首先会去响应鼠标,但是CPU不知道怎么去响应鼠标。
你写的代码被CPU去执行,异常向量表是硬件向软件提供的处理异常的支持。
5、ARM的异常处理机制
详细的描述ARM;
内存正在向高地址增长,地址都是4字节,4字节的往上走的。
在复位的时候,你发生了一个硬件的复位,UBOOT就是从这里开始执行的,所以整个系统的开机。
当你发生复位的事件的时候,硬件就进入0x00,无论你的软件编程多么牛逼,都无法改变,
这些就是硬件的可选择性。
当进入0x04就是未定义的
IRQ : 0x16外部中断。
6、当异常产生时:ARM core:
--拷贝CPSR到SPSR_<mode>(跳转到哪个状态就到哪里)
--设置适当的CPSR位
改变处理器状态进入ARM态
改变处理器模式进入相应的异常模式
设置中断禁止位禁止相应中断
--保存返回地址到LR_<mode>
--设置PC为相应的异常向量
返回时:异常处理需要:
--从SPSR_<mode>恢复CPSR
--从LR 恢复PC指针
--NOTE:这些操作仅仅只能在ARM状态执行。
加起来就不知道别人在干嘛。
7、总结
1、异常处理中有一些是硬件自动做的,有一些是程序员需要自己做的,
需要搞清楚哪些是需要自己做的,才知道如何写代码。
2、以上说的是CPU设计时提供的异常向量表,一般称为一级向量表。
有些CPU为了支持多个中断,还会提供二级中断向量表,处理思路
类似于这里说的一级中断向量表。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。