历史上的今天
返回首页

历史上的今天

今天是:2026年01月13日(星期二)

正在发生

2023年01月13日 | ARM寄存器分析以及异常处理方法

2023-01-13 来源:zhihu

ARM 有7个基本工作模式
User : 非特权模式,大部分任务执行在这种模式

FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式

IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式

Supervisor :当复位或软中断指令执行时将会进入这种模式

Abort : 当存取异常时将会进入这种模式

Undef : 当执行未定义指令时会进入这种模式

System : 使用和User模式相同寄存器集的特权模式

注意:除User(用户模式)是Normal(普通模式)外,其他6种都是Privilege(特权模式)。 Privilege中除Sys模式外,其余5种为异常模式。 各种模式的切换,可以是程序员通过代码主动切换(通过写CPSR寄存器);也可以是CPU在某些情况下自动切换。 各种模式下权限和可以访问的寄存器不同。

非特权模式:User

特权模式:
异常模式:FIQ IRQ Svc Abort Udef

非异常模式:System Monitor

ARM寄存器分析
ARM共有37个寄存器,都是32位长度 37个寄存器中30个为“通用”型,1个固定用作PC,一个固定用作CPSR,5个固定用作5种异常模式下的SPSR。



r13(sp)用作堆栈可以保存上下文,便于以后跳转回来能继续执行

r14(lr)用于存储返回地址,当我们返回原模式可以bl lr或者mov pc lr这样就实现了返回

r15(pc):程序指针,PC指向哪里,CPU就会执行哪条指令(所以程序跳转时就是把目标地址代码放到PC中)

cpsr:中各个bit位表明了cpu的某些状态信息,这些信息非常重要,和后面学到的汇编指令息息相关(譬如BLE指令中的E就和
CPSR中的Z标志位有关) cpsr中的I、F位和开中断、关中断有关 cpsr中的mode位(bit4~bit0共5位)决定了CPU的工作模式,
在uboot代码中会使用汇编进行设置。

spsr:用来保存cpsr



1.条件标志位

-N: Negative result from ALU

-Z: Zero result from ALU

-C: ALU operation Carried out (进位/借位)

-V: ALU operation oveRFlowed (溢出)

* N=1时,说明运算的结果为负数,N=0时,说明运算的结果为正数或零。

* Z=1时,说明运算的结果为0,Z=0时,说明运算的结果为非0。

* C:

- 加法运算(包括CMP):当运算结果产生了进位时(无符号数溢出),C=1,否则为0。

- 减法运算(包括CMP):当运算结果产生了借位时(无符号数溢出),C=0,否则C=1。

- 对于包含移位操作的非加减指令操作时,C为移除值的最后一位。

- 对于其它的非加减指令,C的值通常不变。

* V:

- 对于加减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出

- 对于其它的非加减法指令,V的值通常不变。

2.Q位:

* 在ARM V5及以上的版本的E系列处理器中,Q标识位指示增强的DSP运算指令是否发生了溢出,在其它版本的处理器中,Q未定义。

3.J位:

* 仅ARM 5TE/J 架构支持

* J=1时,处理器处于Jazelle状态

跳转过程
异常向量表
所有的CPU都有异常向量表,这是CPU设计时就设定好的,是硬件决定的。 当异常发生时,CPU会自动动作(PC跳转到异常向量处处理异常,有时伴有一些辅助动作) 异常向量表是硬件向软件提供的处理异常的支持。



***异常产生时
做好保护现场的工作:

(1)把cpsr保存到spsr中,设置适当的cpsr(改变处理器的ARM状态、改变处理器进入相应的异常模式、(视情况)改变中断禁止位禁止相应中断)

(2)保存返回地址到lr

(3)设置pc为相应的异常向量

实现跳转。

***异常返回时
做好恢复现场工作:

(1)从spsr恢复cpsr

(2)从lr恢复pc

注意:这些操作必须在ARM状态执行

TIPS:
(1)异常向量表中除了FIQ中断都是4个字节,所以只够存放一段异常处理程序的代码的首地址

(2)FIQ中断为快速中断,其中一个特殊的地方就体现在他的异常向量表(Vector Table)地址在最后一个,所以它可以存放不止4个字节,这样的话FIQ中断可以不用只存放地址,而是把整个异常处理程序放进去,这样就少跳转了一次,加快了中断相应速度。


推荐阅读

史海拾趣

Chip Supply Micro Devices公司的发展小趣事

在追求经济效益的同时,Chip Supply Micro Devices也积极践行环保理念。公司注重节能减排和资源循环利用,通过采用环保材料和工艺,降低了生产过程中的环境影响。此外,公司还积极参与社会公益活动,推动电子行业的可持续发展。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实基础。

以上五个故事都是基于电子行业的一般情况和趋势虚构的,旨在展示一家微电子器件供应公司可能经历的发展历程。请注意,这些故事并非基于真实事件或公司。

EDDING公司的发展小趣事

在2000年代初,ECLIPSE公司是一家专注于企业级软件开发的公司。公司内部的一个小型团队开发了一个名为“Eclipse”的集成开发环境(IDE),用于提高内部项目的开发效率。随着Eclipse的内部使用越来越广泛,公司高层意识到其巨大的潜力,决定将Eclipse开源,并成立专门的Eclipse部门来管理和推广这一项目。通过开放源代码和社区合作,Eclipse迅速吸引了全球开发者的关注,并逐渐成长为开源开发领域的领军者。

Advanced Power Solutions公司的发展小趣事

随着公司的发展,Advanced Power Solutions开始寻求与行业内其他企业的合作。通过与一家知名电子设备制造商建立战略合作关系,公司成功将其电源管理解决方案集成到对方的产品中。这一合作不仅扩大了公司的市场份额,也提高了公司的品牌知名度。此后,公司陆续与多家企业建立了合作关系,进一步巩固了其在行业内的地位。

Frequency Sources公司的发展小趣事

为了满足不同客户的需求,Frequency Sources公司不断丰富产品线,推出了包括晶体振荡器、温补晶振、压控晶振等在内的多种频率源产品。同时,公司还加强了与上下游企业的合作,通过产业链整合实现了资源的优化配置和成本的降低。这种产品多样化和产业链整合的策略不仅提升了公司的综合竞争力,还为客户提供了更加全面和优质的解决方案。

CLANDELL公司的发展小趣事

随着国内市场的饱和,CLANDELL公司开始寻求国际化发展。公司通过市场调研和合作伙伴的建立,逐步拓展海外市场。在国际化的过程中,CLANDELL公司不仅提升了自身的品牌影响力,也学习到了国际先进的管理经验和市场策略,为公司的长远发展奠定了坚实基础。

台湾兆欣(EMTEK)公司的发展小趣事

随着科技的不断进步和市场需求的不断变化,兆欣始终保持对新技术和新应用的敏锐洞察力。他们不断推出创新产品和技术解决方案,引领着行业的发展方向。同时,兆欣还积极与高校和科研机构合作,共同推动电子行业的创新和发展。这种持续的创新精神是兆欣在电子行业中保持领先地位的关键所在。

请注意,以上故事是基于兆欣公司的发展历程和事实进行创作的,但具体细节和数据可能因时间和市场变化而有所不同。

问答坊 | AI 解惑

电烙铁的使用小技巧

本人原创——乃自己当时查阅的资料和自己的一点点经验而写成,如有错误请多指教! 首先要说明的是,使用电烙铁,绝对不仅仅是只关注电烙铁本身——这里说的“使用电烙铁”其实是指焊接(也包括拆焊)的全过 ...…

查看全部问答>

Cortex-m3 lm1138 程序下到FLASH里面跑飞了怎么回事!

   我的程序下到板子里运行来控制电机,都是经过光耦的,用继电器来控制转向,AD采样后判断,进行快速的切换转向就回出现程序跑飞了,复位键也无效!只有重新下载,开发环境IAR  MDK都用了,MDK出现的情况少点,IAR出现的比较 ...…

查看全部问答>

 优秀PCB设计工程师所需要具备的本领

1.会熟练的使用cadence或mentor软件layout.         2.能独档一面,从做器件到布局布线出光绘。     3.有做各种pcb的设计经验, 如电脑主板,手机,数码相机等电子消费产品,GSM和3G产品的基站单元板,背板 ...…

查看全部问答>

交个作业:串口控制台+遥控解码

昨天上午拿到的st-link-ii和一块最小系统;呵呵,东西到了,不好好看看心里过意不去,就着手做了一个简单的控制台(串口),顺便做了一下遥控解码,测试TIMx,以前一直在看103的资料,最小系统上的却是101,我也懒得去换了,就用它了.接线如下:UART2----PI ...…

查看全部问答>

【求助】MSP430F427的液晶驱动?

本人在使用MSP430F427液晶驱动模块时,遇到如下问题,希望各位高手指点: 配置好Basic Timer1作为on the LCD’s frame frequency(BTCTL = 0xb7 ;),这时如果使能LCDON(LCDCTL = 0x35;),将在所有的segment pin测出有驱动信号(接上相应的3 ...…

查看全部问答>

准备转投TI,立贴

以前是搞STM32的,选型的时候光看144引脚了,结果发现网络功能这块有很多工作要做,USB也是外置芯片,处理起来超级不顺手。以前真的不太看好流明的东西,但是现在被TI收购了,且TI整合产品线,即将推出M4,而且引脚也达到144,所以非常看好M4的前景 ...…

查看全部问答>

EEPROM为什么不能保存,学习中。。

#include <intrins.h>#include <reg52.h>      //52系列单片机头文件#define uchar unsigned char#define uint unsigned int #define RdCommand 0x01 //定义ISP的操作命令#define PrgCommand 0x02#define EraseCo ...…

查看全部问答>

时钟配置

如何给lm3s9b96 配置11.0592MHz的时钟…

查看全部问答>

用万用表测频率问题

请教各位大侠,在只有一个探头,没有参考点的情况下,怎样用万用表测频率?…

查看全部问答>

MSP430F常用模块应用原理

MSP430F常用模块应用原理…

查看全部问答>