ARM的异常处理方式简单介绍

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就是从这里开始执行的,所以整个系统的开机。

ARM的异常处理方式简单介绍_第1张图片

当你发生复位的事件的时候,硬件就进入0x00,无论你的软件编程多么牛逼,都无法改变,

这些就是硬件的可选择性。

当进入0x04就是未定义的

IRQ : 0x16外部中断。


6、当异常产生时:ARM core:

--拷贝CPSR到SPSR_(跳转到哪个状态就到哪里)

--设置适当的CPSR位

改变处理器状态进入ARM态

改变处理器模式进入相应的异常模式

设置中断禁止位禁止相应中断

--保存返回地址到LR_

--设置PC为相应的异常向量

返回时:异常处理需要:

--从SPSR_恢复CPSR

--从LR     恢复PC指针

--NOTE:这些操作仅仅只能在ARM状态执行。

加起来就不知道别人在干嘛。


7、总结

1、异常处理中有一些是硬件自动做的,有一些是程序员需要自己做的,

需要搞清楚哪些是需要自己做的,才知道如何写代码。

2、以上说的是CPU设计时提供的异常向量表,一般称为一级向量表。

有些CPU为了支持多个中断,还会提供二级中断向量表,处理思路

类似于这里说的一级中断向量表。














你可能感兴趣的:(嵌入式:裸机开发)