四、ARM 异常处理
4.1 模式与异常
当正常程序流程被暂时停止发生异常,例如响应一个来自外设的中断。在处理异常前,必须保护当前的处理器状态,以便在完成处理程序后能恢复到原来的程序 。
异常的类型: Reset undefined instruction swi prefetch/bort data/abort Reserved IRQ FIQ
处理器的模式: 每一个异常对应一种模式, 但不是一一对应关系
如下,中断向量表

4.2 ARM 异常处理过程
下面的步骤都是硬件自动完成的,软件不需要完成。


解释:

4.3 异常进入/返回总结

- 注意:
- PC 在不同情况含义不一样,比如:PC(excute)=PC(fetch) - 8, 程序进入异常时LR 值(LR= PC-4)异常会清除处理器的流水线。
- 每种异常发生的时机不一样,对于中断而言,指令还未被执行就产生了,对于 BL/SWI/UNEF 而言, 指令是执行过了的。
- 当发生预取中止, 将预取的指令标记为无效,在指令达到流水线执行阶段执行才进入异常,如果指令在流水线中因为分支而没有被执行,异常不会发生。
- 当发生数据中止异常时,异常会在访存阶段发生。
- PABT 和 DABT 常结合 MMU 和 OS 来使用,abort 的处理程序就必须找出异常中断的原因,使要求的数据可用,并重试被中止掉的指令。
4.4 ARM 的存储系统
4.4.1 存储器与存储控制器
- 存储器单元:存放数据的位置,地址是挂在系统总线。
- 存储控制器:初始化存储器器件,有对应的寄存器配置,寄存器是挂在系统总线上。
4.4.2 存储器存储数据格式
- 大端格式: 8051 ARM 处理器将最高位字节保存在最低地址,最低字节保存在最高地址
- 小端格式: ARM, X86 一个字当中最低地址的字节被看作是最低位字节,最高地址的字节被看作是最高位字节
四、ARM 异常处理的更多相关文章
- Practical JAVA (四)异常处理
Practice 16~27 一 异常控制流(exceptional control flow)机制: try{ <block> } catch(<ExceptionClass> ...
- Swift 中异常抛出和四种异常处理
在Swift中你可以像其他语言一样抛出异常处理异常,今天我们就详细地说说Swift中的异常抛出和处理. 在一开始我们要定义错误或者说是异常,Swift中的一些简单异常可以使用枚举定义,注意这个枚举要继 ...
- ARM 异常处理过程,指令[ swi ]
1. 发生异常: 程序正常执行,突然被一个不正常的事件打断正在执行的程序,执行相应的异常事件对应的程序 2. 5 种异常模式对应着 7 种异常源: 异常工作模式 异常源 FIR ...
- Struts——(四)异常处理机制
在通常的情况下,我们得到异常以后,需要将页面导航到一个错误提示的页面,提示错误信息.利用Stuts我们可以采用两种方式处理异常: 1.编程式异常处理 即我们在Action中调用业务逻辑层对象的方法时, ...
- Mysql存储过程(四)——异常处理
http://blog.csdn.net/crazylaa/article/details/5368421 有时候,不希望存储过程抛出错误中止执行,而是希望返回一个错误码. MySQL 支持异常处理, ...
- arm 异常处理结构
概念:正常的程序执行过程中发生暂时的停止称为异常,如果发现异常情况,将会进行异常处理 作用:快速响应用户的行为,提高cpu的响应能力 异常类型: 异常处理的三个步骤: 1.保护现场: 工作模式保存:C ...
- JavaScript学习 - 基础(四) - 控制语句/异常处理
控制语句 if-else 语句 <script> //控制语句 //if-else格式: var x = 1 if(x==1){ console.log("this is if& ...
- Spring MVC源码(四) ----- 统一异常处理原理解析
SpringMVC除了对请求URL的路由处理特别方便外,还支持对异常的统一处理机制,可以对业务操作时抛出的异常,unchecked异常以及状态码的异常进行统一处理.SpringMVC既提供简单的配置类 ...
- Spring Boot2 系列教程 (十四) | 统一异常处理
如题,今天介绍 SpringBoot 是如何统一处理全局异常的.SpringBoot 中的全局异常处理主要起作用的两个注解是 @ControllerAdvice 和 @ExceptionHandler ...
随机推荐
- RAC_单实例_DG 关于两端创建表空间数据文件路径不一致的问题注意点
RAC_单实例_DG 关于两端创建表空间数据文件路径不一致的问题注意点 主库SYS@orcl1>show parameter db_file_name_convert NAME TYPE VAL ...
- association实现懒加载分段级联查询
这里讲的是人员和部门进行级联分布查询 1.首先在mybatis-config.xml里进行配置 <settings> <!--显示的指定每个我们需要更改的配置的值,即使他是默认的.防 ...
- 十五、RF操作时间控件
由于日期控件经常用的是readonly属性,这个属性意思是此控件为可读,明白点就是只让你看,不让你动. 解决方法就是:用js去掉这个属性,就可写了,就能输入了 导入库:DateTime #方式一 op ...
- Git-Runoob:Git 工作流程
ylbtech-Git-Runoob:Git 工作流程 1.返回顶部 1. Git 工作流程 本章节我们将为大家介绍 Git 的工作流程. 一般工作流程如下: 克隆 Git 资源作为工作目录. 在克隆 ...
- python - MySQLdb 事务处理及批量执行executemany
MySQL数据库有一个自动提交事务的概念,autocommit.含义是,如果开启autocommit, 则每一个语句执行后会自动提交.即一个语句视为一个事务. 在python使用的MySQLdb中,默 ...
- Docker追加容器端口映射
参考文章: https://blog.csdn.net/chouzhou9701/article/details/86725203
- java网络通信:同步阻塞式I/O模型(BIO)
缺点:一个线程只能处理一个客户端连接 服务端: public class TimeServer { public static void main(String[] args) throws IOEx ...
- Java使用JDBC连接Impala
前段时间,有一个项目在连接Impala的时候,可以测试连接成功,但是查询不出表.但是通过impala-shell的时候,是可以查询出来的,我觉的这种方式查询出来的话,可能和jdbc的方式不一样,因为i ...
- DWIN串口屏的使用
学习需要,根据dwin的官方文档及网络资料整理而来. 一. 基础知识理解 1.1.变量地址和描述指针 VP(变量地址)和SP(描述指针)通常是指显示变量功能的两种定义,两者共用0000到6FFF地址 ...
- 递归算法之不用乘号的乘法——用位移实现乘法(dart语言实现)
前两天突发奇想,写一个乘法的实现,但不用乘号*.并测试一下性能如何.因此就有了下面的代码:(本文主要目的是为了玩递归和位移,因此仅限自然数) 首先,标准乘法: int commonMultiplica ...