历史上的今天
今天是:2025年04月02日(星期三)
2020年04月02日 | ARM各种异常返回地址的计算
2020-04-02 来源:eefocus
首先,给出ARM的三级流水线结构图,这是后面分析的基础。

上图中最左侧为指令的地址,根据三级流水线结构,当PC=0X3008是时,正在执行的的指令是地址为0X3000的这条指令。
在分别讲解各种异常之前,有一条总的原则就是:无论发生什么异常(除复位),内核总是会首先将 PC-4 放到LR寄存器中。
1.复位异常
复位异常中断处理程序不需要返回。在复位异常中断处理程序开始整个用户程序的执行,因而它不需要返回。
2.未定义指令异常
指遇到了一条没有定义的指令导致执行时无法执行。
未定义指令异常中断是由当前执行的指令自身产生的,当产生中断时,程序计数器PC的值还未更新(未更新的意思就是PC还没有加4 呢);
以上面的流水线结构为例,地址为0X3000的指令(即第一条指令)执行时产生未定义异常,这时PC = 0X3008,内核将会把PC-4即0X3004放到LR_UND寄存器中。中断执行结束之后,我们实际上要执行的就是0X3004这条指令,所以直接用MOV PC,LR
3.软件中断异常
由指令SWI引起的,程序在执行这一指令后,进入异常中断。
同样,未定义指令异常中断是由当前执行的指令自身产生的,当产生中断时,程序计数器PC的值还未更新;
具体实例与未定义指令异常相同,不再赘述。
4.预取指异常
预取指异常与下面的数据访问异常是比较难以区分的。
由程序存储器引起的中止异常叫做预取指中止异常;
由数据存储器引起的中止异常叫做数据中止异常。
虽然预取指异常在取指阶段就会被标记出来,但是一定要到执行该指令的时候才会出现异常,因为这条指令可能根本就没有机会运行。当然数据中止异常也是要到指令执行阶段才出现的。
这两者之间还有一点共同点就是,当出现异常后,要重新再执行一次这条指令,这也是与其他异常不太一样的地方。
这两者之间的重要区别就在于:预取指异常是由于指令自身引起的,所以当产生中断时,程序计数器PC的值还未更新;但是数据中止异常的产生是由ALU产生的,当产生中断时,PC的值已经更新了(比如说0X3000产生数据异常,中断产生时,PC=0X000C了已经)!!
言归正传,举例说明。地址为0X3000的指令执行时产生预取指异常,这时PC = 0X3008,内核将会把PC-4即0X3004放到LR_ABT寄存器中。中断执行结束之后,我们实际上要执行的就是0X3000这条指令,所以用 SUBS PC,LR,#4
5.数据中止异常
数据中止异常就是在执行指令时数据出现错误。
再次强调,数据访问异常中断由当前执行的指令在ALU里执行时产生,当数据访问异常中断发生时,程序计数器pc的值已经更新。
举例。地址为0X3000的指令执行时产生数据中止异常,这时PC = 0X300C,内核将会把PC-4即0X3008放到LR_ABT寄存器中。中断执行结束之后,我们实际上要执行的就是0X3000这条指令,所以用 SUBS PC,LR,#8
6.中断请求(IRQ)异常
在此不解释何为中断请求异常。
注意,产生中断请求异常时,程序计数器pc的值也已经更新!
举例。地址为0X3000的指令执行时产生数据中止异常,这时PC = 0X300C,内核将会把PC-4即0X3008放到LR_IRQ寄存器中。中断执行结束之后,我们实际上要执行的就是0X3004这条指令,所以用 SUBS PC,LR,#4
7.快速中断(FIQ)请求异常
与IRQ异常基本相同,不再赘述。
总结:
上一篇:S3C2440芯片的时钟体系结构
下一篇:ARM中断异常处理的返回的问题
史海拾趣
|
下一代爆炸性技术是什么? 大趋势的出现都不是简单或孤立的。它们都是以能够完全改变现状的爆炸性技术为起始标志的,例如火药、飞机和微处理器。秘密在于如何提早发现潜在的爆炸性技术并预测出它们可能引领的趋势。 早在1976年,我曾是Tektronix ...… 查看全部问答> |
|
半桥式开关电源变压器参数的计算 开关电源原理与设计(连载41) 1-8-2-5.半桥式开关电源变压器参数的计算 半桥式变压器开关电源的工作原理与推挽式变压器开关电源的工作原理是非常接近的,只是变压器的激励方式与工作电源的接入方式有点不同;因此,用于计算推挽式变压器开关电源变压器初级线圈N1绕组匝数的数 ...… 查看全部问答> |
|
wince能跑起来,但桌面图标和工具栏模糊,不知道是哪个函数设置出问题 这个地方搞了一个多月了,还没有头绪 恳请高手指导,不胜感谢… 查看全部问答> |
|
如何在WINCE下通过串口与PC串口直接连接(支持TCP/IP和SLIP)? 最近几天看了几天的帖子,想了很多办法,要实现PC与PDA的串口通信,但遇到 很多奇怪的问题。希望高人指点一二。 1.PDA是用的WINCE 5.0版本,利用建立新连接→直接连接→串口1(38400,无流控)→网络设置(SLIP,无压缩,无IP头压缩) PC端 ...… 查看全部问答> |
|
各位兄弟姐妹: 最近小弟买了一个多普达得PPC 上面安装的是WM5.0的系统. 我想搭建一个WM5.0的开发平台 学习一下怎么样在上面开发程序 .我应该怎么样做? 还有那里有相应的开发资料 PPC的 SDK 我这里已经下载好了... 谢谢… 查看全部问答> |
|
replyreload += \',\' + 1221089;正所谓凉的,是因为大冷天刚从外边取回来的啊 速尔快递刚刚送来的TI送的各种资料还有一个4G的U盘,速速上照跟大家显摆显摆,秀一秀! Timson,如果您要查看本帖隐藏内容请回复 [ 本帖最后由 jjkwz 于 2011-11-28 ...… 查看全部问答> |
|
诚昱(条形码)自动化技术有限公司 / 2012-03-16 MS337H是专门针对医疗院所应用环境设计的高性能扫描器,采用适应医疗应用环境的白色、蓝色两色配搭设计;抗菌材质可有效防止病毒细菌的入侵,及在使用过程中受漂白剂、酒精、消毒剂、生理盐水 ...… 查看全部问答> |




