历史上的今天
返回首页

历史上的今天

今天是:2024年11月20日(星期三)

正在发生

2019年11月20日 | 为你解颇ARM异常中断返回的几种情况

2019-11-20 来源:51hei

异常中断返回的几种情况:


重要基础知识:R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”

的指令或正在“译码”的指令。一般来说,人们习惯性约定将“正在执行的指令作为参考

点”,称之为当前第一条指令,因此 PC总是指向第三条指令。当 ARM 状态时,每条指令

为 4 字节长,所以 PC 始终指向该指令地址加 8 字节的地址,即:PC 值=当前程序执行

位置+8;


而 ADS 中的 pc,是为了调试看着方便而修改过的,它指向的是正在执行的指令,即

“真正 pc-8”!


1.SWI 和和未定义指令异常中断的返回:

指令地址

A         PC-8  当前指令为 SWI 或未定义指令 此时发生中断.PC 的值还没有更新.

A+4       PC-4  中断时处理器将 PC-4 保存到 LR。       ;lr!

A+8       PC

返回时,从发生中断的指令 A(PC-8)的下一条指令 A+4(PC-4)处开始执行,所以直接把 LR

的值赋给 PC 就行了,具体指令为 MOV PC,LR  (PC=A+4=LR)

白话解释:对于 SWI 和未定义指令异常: 发生异常时 pc 没有更新,根据 ARM 的三级

流水线原理,pc 没有更新,仍然等于(A+8); lr = pc – 4(这时处理器决定的,无法

更改!)即 A+4。

由于这类异常返回后应执行下一条指令(A+4),所以返回时,pc = lr 即可。


2.IRQ 和 FIQ 异常中断处理的返回:

指令地址  对应于 PC

A         PC-8      执行此指令完成后(!)查询 IRQ 及 FIQ,如果有中断请求则产生中

断.

A+4       PC-4

A+8       PC         ;lr!

(此时 PC 的值已经更新,指向 A+12.将当前 PC-4,即 A+8 )。

保存到 LR.返回时,要接着执行 A+4(LR-4)处的指令,所以返回指令为

SUBS PC, LR,#4(PC=A+4=LR-4)

白话解释:对于普中断和快中断异常,中断必须在一条指令执行完以后被检测到,如正在

执行指令甲时发生了中断,不等指令甲执行完是不会处理该中断的,发生异常时 pc 已经

更新(A+12); lr = pc – 4(这时处理器决定的,无法更改!)即 A+8 返回后,应执行被

中断而没有执行的指令(上面的 A+4),所以返回时,pc = lr-4


3,指令预取中止异常中断处理的返回:

指令地址

A     PC-8     执行本指令时发生中断,  

A+4   PC-4     处理器将 A+4(PC-4)保存到 LR.    ;lr!

A+8   PC

返回时,发生指令预取中止的指令 A(PC-8)处重新执行,所以返回指令为

SUBS PC, LR,#4(PC=A=LR-4)

白话解释:对于预取指令中止异常,发生预取指令异常时,是在执行时发生的异常,pc

未更新,即 pc = A+8;lr = pc – 4(这时处理器决定的,无法更改!)即 A+4 。

由于这类异常返回后应重新执行异常的那个指令(A),所以返回时,pc = lr-4


4,数据访问中止异常中断处理的返回:

指令地址

A          PC-8    本指令访问有问题的数据,产生中断时,PC 的值已经更新   

A+4        PC-4    中断发生时 PC=A+12,处理器将 A+8(PC-4)保存到 LR.

A+8        PC        ;lr!

返回时,要返回到 A 处继续执行,所以指令为 SUBS PC,  LR,#8.(PC=A=LR-8)

白话解释:对于数据访问中止异常,发生数据访问中止异常时,是在执行时访问数据错误

导致的异常,pc 已经更新,即 pc = A+12

lr = pc – 4(这时处理器决定的,无法更改!)即 A+8 。

由于这类异常返回后应重新执行异常的那个指令(A),所以返回时,pc = lr-8

深圳嵌入式ARM、linux专业实训,QQ754634522

小节:

Ø 引起 PC 更新的原因一种是数据中止,还有就是中断了.

Ø 中断必须是在一条指令执行完毕后才能被检测到,所以它中断的只是还未执行的那条

指令(pc - 8),所以 pc = lr – 4;

Ø 与中断相同,SWI 和未定义指令异常也是返回到下一条指令(pc - 4),只是他们在执行

时,PC 的值并没有更新,所以 pc = lr;

Ø 预取指令中止异常,也没有发生 pc  更新,但它还得重新执行发生异常的那条指令,

所以 pc = lr – 4;

Ø 数据访问中止异常,发生了 pc  更新,并且它也需要重新执行发生异常的那条指令,

所以 pc = lr – 8。

推荐阅读

史海拾趣

Coiltronics公司的发展小趣事

在电子行业中,产品质量是企业生存的关键。Coiltronics公司深知这一点,因此在生产过程中始终坚持严格的质量管理。公司引进先进的生产设备和技术,建立完善的质量检测体系,确保每一件产品都符合高标准的质量要求。这种对品质的执着追求,使得Coiltronics的产品在市场上赢得了良好的口碑,吸引了大量忠实客户。

EasySync公司的发展小趣事

经过几年的努力,EasySync公司在同步技术领域取得了重大突破,成功研发出一款高效、稳定的同步芯片。这款芯片不仅性能卓越,而且成本较低,受到了广大客户的青睐。随着产品销量的不断增加,公司开始拓展市场,将产品销售到全球各地,逐渐树立了品牌形象。

苏州锋驰(Feng)公司的发展小趣事
通常具有可调的输出电流范围,可以根据需要进行调节。
Ethertronics公司的发展小趣事
在某些情况下,稳流器的输出可能存在一定的脉动和波纹值。
Crocus公司的发展小趣事

XXXX年,Crocus迎来了发展的重要转折点——与Allegro MicroSystems达成合并协议。这次合并不仅为Crocus带来了雄厚的资金支持和更广阔的市场空间,还实现了双方在技术、产品和市场等方面的优势互补。合并后的Crocus在TMR传感器领域取得了更加显著的成果,进一步巩固了市场地位。

Agilent Technologies公司的发展小趣事

随着市场的不断变化和需求的日益增长,Crocus意识到只有不断创新才能保持竞争优势。因此,公司加大了研发投入,成功推出了一系列具有创新性和竞争力的TMR传感器产品。这些产品不仅具有高精度、高灵敏度等优异性能,还广泛应用于电动汽车、清洁能源和自动化等领域,为行业的快速发展提供了有力支持。

问答坊 | AI 解惑

lm741的资料

本帖最后由 paulhyde 于 2014-9-15 09:01 编辑 rt  …

查看全部问答>

关于铝电解电容漏电流

目前国内设计都用哪些公司的铝电解电容啊! 不同的电压等级的铝电解电容漏电流应该不一样,但是一般大家确定电压等级和容量,没确定型号之前,这个漏电流是怎么估计的?…

查看全部问答>

IA4421无线模块的问题

#include        \"reg52.h\" #include    \"uart.h\" sbit                sdi=        P1^4; sbit            &n ...…

查看全部问答>

如何降低嵌入式设备中的电视卡的工作能耗?

一个装有Linux的嵌入式设备,要减少其电视卡的功耗该如何处理啊?(电视卡为mini pci接口) 我的想法有: 1. 让系统待机。但是不知道让系统待机的话,该电视卡是否还在继续接收电视信号? 2. 关闭电视卡的接收端口,但不知怎么写啊,那位大虾推 ...…

查看全部问答>

USB 错误

插入USB设备时,打印出如下调试错误: device not accepting address 2, error -32 请问这是怎么回事啊…

查看全部问答>

STM32F103的USB/CAN怎么共用?(电路设计问题)

请问一下STM32的USB/CAN口在不能remap的条件下,接口电路(CAN收发器/usb总线)能否实现两个应用并存但是不同时应用:指的是在用CAN时不用USB,在用USB时不用CAN,能否实现?需要注意什么? 补充一下:我测试了TJA1050的RX/TX脚有内部上拉也不知 ...…

查看全部问答>

单片机设计电路应如何考虑

我是名初学者,只会一点编程,对于设计电路时就老是会遇到问题,比如再把74hc245接入电路时,就老是会想这个芯片的需要的 驱动电流多少,最大负载多少,看技术手册又看不懂,都是英文,而且那些参数标的我的是一头雾水,不知道那个才是我的那个答 ...…

查看全部问答>

基于MSP430的看门狗的问题

初学者,基于MSP430的看门狗的问题   为什么每次都要关看门狗PS怎么让看门狗溢出 ,然后系统复位…

查看全部问答>

STM32 RTC使用备份电池供电,当主电源断电,RTC到23:59:59时间如何清零?

原先是程序中到23:59:59时间清零,如不能清零,开机时间肯定超过24小时,怎么办??…

查看全部问答>

有做工艺或者工程的吗?求解~~

有没有做贴片或者波峰工艺的,求解,图片中的能否用回流焊或者是波峰焊达到双面焊接的效果! …

查看全部问答>