arm中断保护和恢复_ARM中断异常处理的返回
举个小例子,下面是一段ARM汇编代码:
地址
指令
0x3000
BL add
0x3004
MOV r0,#0
0x3008
MOV r1,#1
0x300C
MOV r2,#2
AREA test,CODE,READONLY
ENTRY
Start
MOV r0,#1
MOV r1,#1
BL add
MOV r0,#0
MOV r1,#1
Add
ADD r0,r0,r1
MOV r0,r0,r1
END
当0x3000处的BL指令执行时,会把PC(=0x3008)保存到LR寄存器里面,也就是LR=0x3008。接下来处理器会立即对LR进行一个自动的更新动作:LR=LR-0x4,这样,LR里面的地址为0x3008 – 0x4 = 03004,它是指令”MOV r0,#0”的地址,所以当从子程序add返回时,LR里面正好是正确的返回地址。既是下一条要执行的指令的地址。
(2)中断异常处理函数调用
异常就是正在执行的指令,由于各种软件或硬件故障被打断,比如,在读数据或指令时,访问存储器失败、产生了一个外部硬件中断等。当这些情况发生时,在ARM系统里,由异常和中断处理程序做出相应的处理,当处理完成后,要返回到被中止的指令,使被中止的指令能够继续正常执行下去。因此,确定异常和中断处理程序的返回地址是一个非常重要的问题。
1、中断处理
当外部中断IRQ和FIQ(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呢?
地址
指令
0x3000
BL add
0x3004
MOV r0,#0
0x3008
MOV r1,#1
0x300C
MOV r2,#2
我们看上个表,比如在执行地址为0x3004的move指令时,突然来了一个IRQ中断,这个中断打断了move指令的执行,这个时候就要去跳转到异常处理函数,之后还要返回0x3004地址重新执行move指令。当中断发生时,LR里面保存了用户模式下PC的值,那么当执行地址为0x3004的move指令时,PC的值应该是0x300C,前面介绍过,当发生跳转时,处理器会对LR进行一个自动的更新动作:LR=LR-0x4,这样LR里面的地址是0x300C-0x04=0x3008。但是0x3008并不是我们要的地址,因为中断发生在地址为0x3004的move指令执行的时候,所以中断处理完后应该返回这个地址。 这就是在计算返回地址的时候LR减去4的原因。对于FIQ中断和预取指中止异常,计算返回地址方法和IRQ相同。
arm中断保护和恢复_ARM中断异常处理的返回相关推荐
- arm中断保护和恢复_ARM中断返回的详细分析
原标题:ARM中断返回的详细分析 在ARM体系中,通常有以下3种方式控制程序的执行流程: 1.在正常执行过程中,每执行一条ARM指令,程序计数器PC的值加4个字节:每执行一条Thumb指令,程序计数器 ...
- arm中断保护和恢复_ARM异常中断的原因及处理措施
当ARM异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行.当异常中断处理程序执行完成后,程序返回到发生中断指令的下条指令处执 行.在进入异常中断处理程序时,要保存被中断程序的 ...
- arm中断保护和恢复_ARM的中断处理详细过程
ARM有七种异常中断类型,优先级.工作模式(有七种工作模式).地址.功能都不一样.如其中软件中断SWI优先级为6,工作模式管理模式,异常向量地址为0x00000008,功能是用户定义的中断指令,可用于 ...
- arm中断保护和恢复_ARM中断处理过程
以s3c2440 ARM9核为例: 一:s3c2440 ARM处理器特性: 1.S3C2440支持60个中断源,含子中断源: 2.ARM9采用五级流水线方式: 3.支持外部中断和内部中断: 二.s3c ...
- arm中断保护和恢复_浅谈ARM处理器的七种异常处理
昨天的文章,我们谈了ARM处理器的七种运行模式,分别是:用户模式User(usr),系统模式System(sys),快速中断模式(fiq),管理模式Supervisor(svc),外部中断模式(irq ...
- arm中断保护和恢复_嵌入式ARM系统异常和中断处理知识总结
关于异常处理,分为三部分: 1. ARM异常和模式:core处理异常时的操作,几种模式介绍. 2. Vector table: 3. 异常优先级 4. lr偏移:几种异常如何返回 异常和中断处理简介 ...
- fiq中断的入口地址_ARM中断模式(IRQ)和快速中断模式(FIQ)区别比较
概念 IRQ(Interrupt Request):指中断模式. FIQ(Fast Interrupt Request):指快速中断模式. IRQ与FIQ是ARM处理器的两种不同编程模式(ARM有7 ...
- 实地址模式与保护模式下的中断与异常处理
在中断和异常的处理过程中,很重要的一件事是如何识别中断源,获取中断服务子程序的入口地址.在80486 CPU系统中,因为CPU的工作模式不同而获取中断向量的方式有所不同,本节讨论CPU工作在实地址模式 ...
- 字符设备驱动笔记——中断方式按键驱动之linux异常处理结构(四)
1.中断方式获取按键值单片机: 1)按键按下 2)cup发生中断,跳转到异常向量入口执行 3)b 函数a.保存被中断的现场b.执行中断处理函数c.恢复 linux: 1)trap_init()函数构造 ...
最新文章
- dos下命令行执行程序时候注意程序所使用文件的路径问题
- 批量去除歌曲tag标签
- Spring Boot 2.2.1 正式发布,需特别注意这个注解的使用!
- GSLX680触摸屏驱动移植
- sonarqube7.8汉化教程:安装中文插件
- idc机房建设费用_idc机房服务器带宽租用费用
- 利用js弹出select下拉选中option的内容
- html的页面宽高变形问题,CSS+div 设计的网页在不同浏览器中变形的问题
- 计算机控制系统视频关守平,国家级精品课《计算机控制系统》课程建设研讨会顺利召开...
- ajax 输入一个整数,jQuery.ajax()仅适用于整数
- PHP PDO的简单使用(query(),exec(),prepare(),Transaction,行锁)
- maven 打包命令的使用
- 计算机电源供电方式,电脑主板开关电源供电方式图文介绍
- vue 路由history模式打包部署 The requested URL * was not found on this server. 的解决方法
- 原生js完成拼图小游戏
- Beyond Compare4中文版免费版上线
- 【修真院java小课堂】clean,install,package,deploy分别代表什么含义?
- 系统清道夫 android2.1,安卓系统清道夫国际版
- Rust 创始人:社区应限制成长速度;电商法 1 月 1 日起实施
- php carbon 格式化,Laravel Carbon 简明使用