嵌入式工程师成长之路 系列文章 总目录 |
---|
系列文章总目录 |
希望本是无所谓有,无所谓无的,这正如脚下的路,其实地上本没有路,走的人多了,也便成了路 |
原创不易,文章会持续更新,欢迎微信扫码关注公众号 |
承接 小程序 / 嵌入式 / PC端项目开发,联系作者 |
1.异常和中断的区别
中断是异常的一种,是没有那么异常的异常。中断是一个我们知道当发生了这种异常后怎后做的异常,而预取址异常,这就是真正的异常;发生了这个异常之后我们也不知道怎样去处理,系统直接跑飞。
2.异常向量表
异常向量表都是硬件事先实现了的,是设计cpu时就确定了的,也就是说,只要某个异常出现,CPU就会自动的跳转到向量表对应的地址处去执行代码。譬如,当发生系统复位异常时,CPU就会自动的跳转到0x00地址处去执行程序。
所以当我们一上电之后CPU就会自动的去执行0x00处的启动代码。由上图可知,每一个地址处都只有4个字节,所以这4个字节只是放了一条跳转指令(跳转到真正的代码处开始执行程序)。还要注意,这里面放的不是一条跳转指令本身,而是这条跳转指令的地址(指针的指针)。
3.发生异常时,CPU会自动做的事情
在异常处理过程中一定要搞清楚哪些是CPU自己自动完成的,哪些是需要程序员来完成的。下面的这些都是CPU自动完成的,不需要我们些程序控制的.ARM的异常处理机制如下。
当CPU出现异常时,会自动的做以下事情:
(1)拷贝CPSR到SPSR_mode,SPSR_mode指目标模式下的寄存器。
(2)设置的cpsr位。
(3)改变处理器状态进入arm状态。
(4)改变处理器模式进入相应的异常模式:
(4.1)设置中断禁止位禁止相应中断(如果有需要的话)。
(4.2)保存返回地址到LR_mode。
(4.3)设置PC为相应的异常向量。
当异常返回时,会自动做以下事情(这也是需要做的事情):
(1)从spsr_<mode>恢复cpsr。
(2)从lr_<mode>恢复pc。
4.一级向量表和二级向量表
异常向量表可以称为CPU的一级异常向量表,还有二级向量表,就拿中断来说,A8一共有100多个中断,只要发生中断都会自动的跳转到0x18处执行程序,但是这么多的中断CPU怎样分辨呢?这就是用二级向量表。二级向量表可以用来区分到底是哪个异常发生了,是定时器超时了,还是外部中断发生了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)