四、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 ...
随机推荐
- Text Classification
Text Classification For purpose of word embedding extrinsic evaluation, especially downstream task. ...
- eclipse + MinGW搭建C/C++环境
Eclipse+CDT+MinGW 配置 C/C++ 开发环境 开场白:谨以此文献给所有喜欢探索和热爱开源软件的朋友们. 1:首先你得有 JAVA 运行环境,这样你才可以运行eclipse ,你可以到 ...
- 关于自定义 List集合排序的方法!
大致流程: 排序是用到排序的接口Comparator<T>你要先建一个类实现比较器Comparator //大致流程public class StuComp implements Comp ...
- 阶段3 1.Mybatis_11.Mybatis的缓存_5 缓存的概念
2.Mybatis中的缓存 什么是缓存 存在于内存中的临时数据. 为什么使用缓存 减少和数据库的交互次数,提高执行效率. 什么样的数据能使用缓存 ...
- DELPHI中函数、过程变量的声明与应用
Procedure型变量: 在DELPHI中,函数.过程的地址可以赋给一个特殊类型的变量,变量可用如下方式声明: var p : procedure(num:integer); //过程 或: var ...
- flask如何实现https以及自定义证书的制作
http://blog.csdn.net/yannanxiu/article/details/70672744 http://blog.csdn.net/yannanxiu/article/detai ...
- 求一个集合S中m个元素的所有排列以及一个数组A的全排列—递归实现版完整代码
说明,本文全文代码均用dart语言实现. 求一个集合S中m个元素的所有排列情况,并打印,非常适合用递归的思路实现.本文给出了两种实现方法,一种是给定的填充排列数组长度是固定的,一种是可变长度的.两种方 ...
- 机器学习实战-K-近邻算法(kNN)
k-近邻算法(kNN)---它的工作原理是:存在一个样本数据集合,也称做训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每个数据与所属分类的对应关系.输入没有标签的新数据后,将新数据的每 ...
- 手动设计神经网络进行MNIST分类
前言: 用手工设计的两层神经网络,经过200个epoch,最后得到0.9599,约0.96的精度 正文 import tensorflow as tf from tensorflow.examples ...
- CentOS8 下 Redis5.0.7 哨兵Sentinel 模式配置指南
下载Redis Redis下载链接 解压缩 tar -xzvf redis-5.0.7.tar.gz 编译安装 make和gcc依赖 可通过yum -y install gcc automake au ...