对ARM异常(Exceptions)的理解
.globl _start ;系统复位位置
_start: b reset ;各个异常向量对应的跳转代码
ldr pc, _undefined_instruction ;未定义的指令异常
ldr pc, _software_interrupt ;软件中断异常
ldr pc, _prefetch_abort ;内存操作异常
ldr pc, _data_abort ;数据异常
ldr pc, _not_used ;未使用
ldr pc, _irq ;慢速中断异常
ldr pc, _fiq ;快速中断异常
|
.globl _start ;系统复位位置
_start: b reset ;各个异常向量对应的跳转代码
ldr pc, _undefined_instruction ;未定义的指令异常
……
_undefined_instruction :
.word undefined_instruction
也许有人会有疑问,同样是跳转指令,为什么第一句用的是 b reset;
而后面的几个都是用ldr?
为了理解这个问题,我们以未定义的指令异常为例。
当发生了这个异常后,CPU总是跳转到0x4,这个地址是虚拟地址,它映射到哪个物理地址
取决于具体的映射。
ldr pc, _undefined_instruction
相对寻址,跳转到标号_undefined_instruction,然而真正的跳转地址其实是_undefined_instruction的内容——undefined_instruction。那句.word的相当于:
_undefined_instruction dw undefined_instruction (详见毕设笔记3)。
这个地址undefined_instruction到底有多远就难说了,也许和标号_undefined_instruction在同一个页面,也许在 很远的地方。不过除了reset,其他的异常是MMU开始工作之后才可能发生的,因此undefined_instruction 的地址也经过了MMU的映射。
在刚加电的时候,CPU从0x0开始执行,MMU还没有开始工作,此时的虚拟地址和物理地址相同;另一方面,重启在MMU开始工作后也有可能发生,如果reset也用ldr就有问题了,因为这时候虚拟地址和物理地址完全不同。
因此,之所以reset用b,就是因为reset在MMU建立前后都有可能发生,而其他的异常只有在MMU建立之后才会发生。用b reset,reset子程序与reset向量在同一页面,这样就不会有问题(b是相对跳转的)。如果二者相距太远,那么编译器会报错的。
对ARM异常(Exceptions)的理解相关推荐
- ARM CORTEX-M3 内核架构理解归纳
ARM CORTEX-M3 内核架构理解归纳 来源:网络 个人觉得对CM3架构归纳的非常不错,因此转载 基于<ARM-CORTEX M3 权威指南>做学习总结: 在我看来,Cotex-M3 ...
- 函数指针数组在ARM异常中断处理中的应用
介绍一种简洁.高效.灵活的ARM异常中断处理方法. 在ARM中,由于所有的中断都使用同一个异常中断入口地址,即0x00000018.因此需要在异常中断处理程序中根据相应的中断号调用对应的中 ...
- 【ARM】arm异常中断处理知识点
ARM处理器7种类型异常 按优先级从高到低的排列如下: 复位异常(Reset) 数据异常(Date Abort) 快速中断异常(FIQ) 外部中断异常(IRQ) 预取异常(Prefetch Abort ...
- 嵌入式:ARM异常中断指令SWI、BKPT、CLZ详解
文章目录 SWI 二进制编码 汇编格式 断点指令(BKPT-仅用于v5T体系) 二进制编码 汇编格式 前导0计数 二进制编码 汇编格式 异常中断指令可以分为一下两种: 软件中断指令(SWI) 断点指令 ...
- 【嵌入式开发】ARM 异常向量表 ( 异常概念 | 异常处理流程 | 异常向量 | 汇编代码 )
一. 异常向量表 1. 异常相关概念 (1) 异常 (2) 异常类型简介 2. 异常处理 (1) 异常处理 二. 异常向量表代码编写 1. 初始化异常向量表模块代码 2. 链接器脚本 3. Makef ...
- [ARM异常]-异常进入和异常退出时的arm core的硬件自动的行为
引流关键词: IRQ,FIQ,Serror, 中断,同步异常,异步异常,TF-A,TF-M,ATF,TrustedFirmware,trustzone,TEE,optee,trusty,tlk,lk, ...
- [ARM异常]-ARMV8-aarch64异常和中断处理概念详细介绍
★★★ 个人博客导读首页-点击此处 ★★★ 文章目录 1.异常和中断的概念 2.异常产生的方法: (1).Abort : (2).Reset (3).同步异常 (4).异步异常(中断) 3.同步异常和 ...
- [ARM异常]-linux中(aarch/aarch64)异常向量表介绍
文章目录 1.ARM的异常向量表基地址寄存器--VBAR 1.1.armv8 : VBAR寄存器 1.2.armv7 : VBAR寄存器 2.ARM的异常向量表的定义 2.1 armv8 :异常向量表 ...
- sas java 虚拟机异常_深入理解JAVA虚拟机之异常诊断
常见的JAVA虚拟机HotSpot虚拟机运行时数据库由5部分构成:方法区,堆,虚拟机栈,本地方法栈,程序计数器.下面列举各个部分可能出现的异常及其出现原因. 1.方法区存放的已被虚拟机加载的类型信息, ...
最新文章
- 一张贴纸骗过AI识别?对抗性机器学习是什么东西?
- monodroid发布的最新版本
- java中怎么固定间距_java中的GridBagLayout是怎么调组件间距的...
- 九十五、二叉树的递归和非递归的遍历算法模板
- CentOS 7 安装方式汇总
- apache 错误日志 File does not exist: 解决办法
- java汉字转化accic_Java自主学习贴
- 1.需要对txt存放的测试数据做去重处理,代码如下
- 电子商务网站 数据库产品表设计方案
- [转] ASP.NET中使用javascript
- mybatis 遍历数组_Mybatis中别名、插件与数据源配置
- 由Unity發佈到Google Play (Android Market)的步驟
- 解决Vue的history模式刷新页面出现404的问题
- 计算机打印机节支措施,“节支降耗,从我做起 ”倡导篇 ——节约纸张
- 进阶之路:深入解读 Java 堆外内存 | 凌云时刻
- 如何运行网上下载的matlab代码?怎样找到matlab主程序?
- python小游戏之超级玛丽进阶版(1~4关)。好玩到爆炸~【内附github源码,及其详细备注】
- microbit积木块菜单图标
- 低代码里程碑版—JeecgBoot 3.4.3 版本发布,低代码功能专项升级
- 游戏开发人员推荐书单
热门文章
- DEDECMS后台上传banner图控制图片轮播
- [Asp.net 5] Options-配置文件(2)
- [PHP]php基础练习题学习随笔
- 消除 activity 启动时白屏、黑屏问题
- c语言求占用内存sizeof,C语言中sizeof的用法
- 广西卫生职业技术学院计算机考试,广西卫生职业技术学院单招2021年春招分数线...
- arcgis合并tif影像_微图影像地图导出拼接大图的参数说明
- python中列表常用方法_Python中列表的常用方法
- java体重指数计算器程序_java 学习 ——计算器小程序
- graphpad做折线图坐标轴数字_pandas做数据可视化具体操作,快来看看吧