ARM1176JZF-S/S3C6410处理器的异常处理过程
时间:11-09
来源:互联网
点击:
一个周期内都不会空闲,所以平均来看,执行每条指令都只要一个周期的时间。
从二进制指令的角度来看,当前指令在执行的时候,下一条指令已经在被翻译,再下一条指令已经正在被读取。注意pc寄存器总是指向正在被读取的那条指令,而不是正在被执行的指令。如下图所示:
箭头方向是指令运行的方向,左侧是低地址,右侧是高地址,当A指令是正在运行的指令,pc寄存器现在正指向C指令的位置。
下面,分别以软中断异常和数据异常为例来解释一下上文中所讲的内容:
在软中断发生时,指令流水线的结构与上图完全一样。软中断是由正在执行的指令A触发的,它的任务已经完成,所以在中断处理结束之后,A指令不需要再被执行一次,应该直接执行B指令。而在进入中断处理程序之前,CPU已经自动将(pc-4)的值存入lr,这正是B指定的位置。所以在中断返回时,直接把lr的值赋给pc就行了。
在数据访问异常发生时,指令流水线的结构与上图不太一样,正在执行的指令仍然是A,pc已经更新,即指向了D指令。在中断处理结束时,数据的问题已经解决(可以访问),A指令还需要再重新执行一次,所以pc需要指向A指令处。而在进入中断处理程序之前,CPU已经自动将(pc-4)的值存入lr,这是C指令的位置,所以我们需要手动调整pc的位置,把它再减8,这才是A指令的位置。
ARM1176JZF-SS3C6410处理器异常处 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)