848|0

26

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

ARM异常处理小结 [复制链接]

作者:武汉华嵌嵌入式培训中心  讲师   方老师

异常就是正在执行的指令,由于各种软件或硬件故障被打断,比如,在读数据或指令时,访问存储器失败、产生了一个外部硬件中断等。当这些情况发生时,在ARM系统里,由异常和中断处理程序做出相应的处理,当处理完成后,要返回到被中止的指令,使被中止的指令能够继续正常执行下去。因此,确定异常和中断处理程序的返回地址是一个非常重要的问题。
下面是中断异常入口、返回指令、返回地址的一个表,ARM R14_x 是发生中断时保存到R14的返回地址,pc指的是发生了中断的那条指令的地址。
异常或入口
返回指令
ARM R14_x
BL
MOV    PC,R14
PC+4
SWI
MOVS PC,R14_svc
PC+4
未定义的指令
MOVS PC,R14_und
PC+4
预取指中止
SUBS   PC,R14_abt,#4
PC+4
快中断
SUBS   PC,R14_fiq,#4
PC+4
中断
SUBS   PC,R14_irq,#4
PC+4
数据中止
SUBS   PC,R14_abt,#8
PC+8
中断处理
当外部中断IRQFIQ(Fast Interrpt Request,快速中断请求)发生时,ARM核完成一部分工作。当然,这些工作是任何异常发生时都必须要做的,所以ARM处理器就会自动带我们完成。其它重要的工作,必须由程序员来完成。ARM处理器处理的事包括从用户模式切换到IRQ模式、状态寄存器值的变化及跳转。比如说,处理器自动跳转到从0x0地址开始的异常中断向量表的0x18处,在向量表的0x18处,最简单的指令为”B HandlerIRQ”
那程序员所要关心的就是实现具体的异常处理程序(HandlerIRQ)。当用ARM汇编语言实现HandlerIRQ函数的时候,如何确定HandlerIRQ函数正确地返回地址,使被中止的指令能够继续正常执行下去。
比较常用的中断处理程序结构如下:
HandlerIRQ ;中断响应,从向量表直接跳来
SUB R14,R14,#4 ;计算返回地址
STMFD R13,{R0-R3,R14} ;保护现场,一般只需要保护{R0-R3,LR}
BL irqHandler ;跳到具体的异常处理函数
LDMFD R13,{R0-R3,PC}^ ;恢复现场
有程序可以看出,通过”SUB R14,R14,#4”计算中断函数的返回地址。那有人一定会问,为什么计算返回地址的时候要减去4呢?
地址          指令
0x100      MOV R0,#0x00
0x104     MOV R0,#0x00
0x108     MOV R1,#0x01
0x10C     MOV R2,#0x02
看上个代码片段,比如在执行地址为0x104MOV指令时,突然来了一个IRQ中断,这个中断打断了MOV指令的执行,这个时候就要去跳转到异常处理函数,之后还要返回0x104地址重新执行MOV指令。当中断发生时,LR里面保存了用户模式下PC的值,那么当执行地址为0x104MOV指令时,PC的值应该是0x10C,前面介绍过,当发生跳转时,处理器会对LR进行一个自动的更新动作:LR=LR-0x4,这样LR里面的地址是0x10C-0x04=0x108。但是0x108并不是我们要的地址,因为中断发生在地址为0x104MOV指令执行的时候,所以中断处理完后应该返回这个地址。这就是在计算返回地址的时候LR减去4的原因。对于FIQ中断和预取指中止异常,计算返回地址方法和IRQ相同。

更多技术博文请直接访问 武汉华嵌官网

此帖出自信息发布论坛
点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条
ADI &文晔 探索季第一站,邀您在活动帖跟帖,ADI资深工程师将与您一道寻求解决之道! ...
春晚,最出圈当属穿着棉马甲跳秧歌的机器人”秧Bot”。
转手绢、飞手绢、变换队形,精准度和稳定性甚至超越人类,这背后少不了电机控制技术。

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表