12.4 ARM异常处理

news2024/11/16 23:30:13

目录

ARM异常处理(一)

异常

概念

异常处理机制

ARM异常源

概念

ARM异常源

ARM异常模式

ARM异常处理(二)

ARM异常响应

异常向量表

异常返回

IRQ异常举例​编辑

ARM异常处理(三 )

异常优先级

FIQ和IRQ

ARM微架构

流水线

指令流水线

ARM指令流水线

PC的作用(取指)

多核处理器

多核处理器

作用

资源


ARM异常处理(一)

异常

概念

处理器在正常执行程序的过程中可能会遇到一些不正常的事件发生 这时处理器就要将当前的程序暂停下来转而去处理这个异常的事件 异常事件处理完成之后再返回到被异常打断的点继续执行程序

 

异常程序也是一段程序,如信号,网卡传输的数据拆包,像游戏中加减声音按键,由于速度很快,所以不被人所感知

异常处理机制

不同的处理器对异常的处理的流程大体相似,但是不同的处理器在具体实现的机制上有所不同;比如处理器遇到哪些事件认为是异常事件遇到异常事件之后处理器有哪些动作、处理器如何跳转到异常处理程序如何处理异常、处理完异常之后又如何返回到被打断的程序继续执行等我们将这些细节的实现称为处理器的异常处理机制

ARM异常源

概念

导致异常产生的事件称为异常源

ARM异常源

FIQ 快速中断请求引脚有效【一般由外部硬件产生,如网卡】

IRQ 外部中断请求引脚有效【一般由外部硬件产生,如网卡】

Reset 复位电平有效【复位】

Software Interrupt 执行swi指令【一般由软件或指令产生】

Data Abort 数据终止【如读取数据时,地址出错】

Prefetch Abort 指令预取终止【取指令时出错】

Undefined Instruction 遇到不能处理的指令【指令未定义】

以上七种为异常源与异常模式不同

ARM异常模式

异常模式

在ARM的基本工作模式中有5个属于异常模式,即ARM遇到异常后会切换成对应的异常模式

异常源FIQIRQReset/SWIData Abort/Prefetch AbortUndef Instruction
异常模式FIQIRQSVCAbortUndef

ARM异常处理(二)

ARM异常响应

 

ARM产生异常后的动作(自动完成)

1.拷贝CPSR中的内容到对应异常模式下的SPSR_<mode>

SPSR(Saved Program Status Register)是ARM架构中的一个寄存器,用于保存先前执行状态的副本。它是一个特殊的寄存器,与CPSR(Current Program Status Register)相对应。

当ARM处理器从一种处理模式(如用户模式、特权模式等)切换到另一种模式时,当前模式的CPSR的值会保存到SPSR中,以便在返回之后能够恢复执行状态。SPSR允许处理器在模式切换之间保存和恢复相关的执行状态,例如标志位、程序模式、中断使能等。

不同的处理模式(如异常模式、中断模式)都有对应的SPSR寄存器。每个模式都有一个特定的SPSR,用于保存该模式下的执行状态。当从异常或中断返回时,处理器将从相应模式的SPSR中恢复先前的执行状态。

2.修改CPSR的值

2.1.修改中断禁止位禁止相应的中断【防止同级别中断打断当前中断IRQ,但是防止不了FIQ,CPSR[7]】

2.2.修改模式位进入相应的异常模式【CPSR[0:3]】

2.3.修改状态位进入ARM状态【处理异常时必须在ARM状态下,CPSR[5]】

3.保存返回地址到对应异常模式下的LR_<mode>【链接寄存器】

4.设置PC为相应的异常向量(异常向量表对应的地址)

异常向量表

异常向量表

异常向量表的本质是内存中的一段代码

表中为每个异常源分配了四个字节的存储空间

遇到异常后处理器自动将PC修改为对应的地址

因为异常向量表空间有限一般我们不会再这里写异常处理程序,而是在对应的位置写一条跳转指令使其跳转到指定的异常处理程序的入口 注:ARM的异常向量表的基地址默认在0x00地址但可以通过配置协处理器来修改其地址

 

异常返回

ARM异常返回的动作(自己编写)

1.将SPSR<mode>的值复制给CPSR 使处理器恢复之前的状态

2.将LR_<mode>的值复制给PC 使程序跳转回被打断的地址继续执行

IRQ异常举例

注:整个过程CPSR保存的永远是当前程序运行状态 SPSR只是异常时对原来的CPSR进行备份

ARM异常处理(三 )

异常优先级

多个异常同时产生时的服务顺序

Reset 复位

Data Abort

FIQ 硬件 优先级更高

IRQ 硬件 优先级略低

Prefetch Abort

Software Interrupt

Undefined instruction

FIQ和IRQ

FIQ的响应速度比IRQ快

FIQ在异常向量表位于最末

可直接把异常处理写在异常向量表之后,省去跳转,可以直接写

FIQ模式有5个私有寄存器(R8-R12)

执行中断处理程序前无需压栈保存寄存器,可直接处理中断

FIQ的优先级高于IRQ

3.1 两个中断同时发生时先响应FIQ

3.2 FIQ可以打断RIQ,但RIQ不能打断FIQ

ARM微架构

流水线

 

指令流水线

1.取址:指令计数器PC 指令寄存器IR 【N】

2.译码:指令译码器 【N-4】

3.执行:运算器寄存器 【N-8】

 

 

ARM指令流水线

ARM7采用3级流水线

ARM9采用5级流水线

Cortex-A9采用8级流水线

注1:虽然流水线级数越来越多,但都是在三级流水线的基础上进行了细分

PC的作用(取指)

不管几级流水线,PC指向的永远是当前正在取指的指令,而当前正在执行的指令的地址为PC-8

指令流水线机制的引入确实能够大大的提升指令执行的速度但在实际执行程序的过程中很多情况下流水线时是无法形成的比如芯片刚上电的前两个周期、执行跳转指令后的两个周期等所以指令流水线的引入以及优化只能使平均指令周期不断的接近1而不可能真正的达到1,且流水线级数越多芯片设计的复杂程度就越高,芯片的功耗就越高

 

多核处理器

多核处理器

即一个SOC中集成了多个CPU核

作用

不同的线程可以运行在不同的核心中做到真正的并发

资源

多核处理器共用外设与接口资源

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/730588.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自我介绍这样写?

已经帮小伙伴改了 500 多份简历了&#xff0c;也发现了一些大家写简历时的共性问题。其中让我印象比较深刻的一个点就是 自我介绍 &#xff0c;基本上所有同学的自我介绍都是这么写的&#xff1a; 读这篇文章的朋友们&#xff0c;你是不是也是这么写自我介绍的呢&#xff1f; 这…

MySQL索引优化整合案例实现

目录 1 JOIN优化1.1 JOIN算法原理1.2 in和exists函数 2 order by优化2.1 索引排序2.2 额外排序2.3 排序优化 3 索引单表优化案例3.1. 建表3.2. 单表索引分析3.1.1 需求3.1.2 优化 4 索引多表优化案例 1 JOIN优化 1.1 JOIN算法原理 1) JOIN回顾 JOIN 是 MySQL 用来进行联表操作…

在 Jetpack Compose 中创建 BottomAppBar

Jetpack Compose 是 Android 的现代 UI 工具包&#xff0c;它使得构建美观且功能强大的应用变得更加简单。在本文中&#xff0c;我们将探讨如何使用 Jetpack Compose 创建一个 BottomAppBar。 开始之前 确保你的开发环境已经设置好了 Jetpack Compose。你需要使用 Android Stu…

矩阵Matrices

目录 矩阵的变换 向量和矩阵 矩阵的变换 房子图形的矩阵变换&#xff08;wiggle动态变换&#xff09; uicontrol的‘style’类型&#xff1a; X house dot2dot(X) theta1 wiggle(X) function dot2dot(X) % DOT2DOT Connect the points from a 2-by-n matrix. X(:,end1) X…

5 类数据,洞察游戏的秘密

数据犹如一扇扇窗户&#xff0c;透过它&#xff0c;我们可以洞察到游戏世界内部的诸多秘密。这些秘密&#xff0c;就像是隐藏在房间深处的宝藏&#xff0c;只有真正理解并善用它们&#xff0c;我们才能创造出更吸引人的游戏&#xff0c;形成更成功的商业模式。 一个关键的问题是…

【Linux】—— 浅谈进程优先级

本期&#xff0c;我们将来聊聊的是关于进程优先级的相关知识&#xff01;&#xff01;&#xff01; 目录 序言 &#xff08;一&#xff09;基本概念 &#xff08;二&#xff09;查看系统进程 1、PRI and NI 2、PRI vs NI &#xff08;三&#xff09;设置优先级 序言 首先…

关于antdesign-vue的layout组件样式失效问题(#components-layout-demo-custom-trigger)

1.错误描述 使用antdesign vue 中的layout作为主要布局&#xff0c;https://www.antdv.com/components/layout-cn 正常引入后&#xff0c;跟期望的样子不一样 期望中的样子 实际的样子 logo没有了&#xff0c;而且此时也无法更改样式。 此时的样式是这样的 无论怎么修改都…

Grafana 使用Rest API 作为数据源的实践

本文使用最新版本的Grafana 10 进行操作。 如果要使用Rest API 作为grafana 的数据源&#xff0c;可以选择安装一个Infinity的数据源插件。 如果创建数据源时&#xff0c;搜不到infinity&#xff0c;点击find more 查找安装该数据源插件 1. 安装 Infinity 数据源插件&#xf…

IP 协议的相关特性

目录 IP协议有三大特点&#xff1a;无连接、无状态、不可靠。 四位版本号 四位头部长度 八位服务类型: 十六位总长度 16 位标识, 3 位标志, 13 位片偏移 八位生存时间 八位协议 十六位首部校验和 关于IP v4地址不够的问题 ip地址动态分配: ip地址转换(NAT) 数据传输…

一个空的Object在内存中占用几个字节

文章目录 一、对象在内存中的布局1. 对象头1.1. 哈希码&#xff08;Hash Code&#xff09;&#xff1a;1.2. 对象所属的年代&#xff08;Generation&#xff09;&#xff1a;1.3. 对象锁&#xff08;Object Lock&#xff09;&#xff1a;1.4. 锁状态标志&#xff08;Lock State…

POE级联蓝牙定位系统方案_蓝牙信标,蓝牙网关,级联蓝牙网关

近年来,随着新能源行业的快速发展,在化工厂,核电厂以及电力电厂等企业,对人员定位,人员导航,资产定位,生命体征监测的需求越来越大。传统的蓝牙室内定位方案中蓝牙信标为锂亚电池供电,需定期更换电池且有安全隐患,为更好的服务有蓝牙定位导航,被动人员定位,生命体征…

vue创建项目报错npm install --loglevel error --legacy-peer-deps

vue创建项目报错npm install --loglevel error --legacy-peer-deps 如图所示&#xff1a; 话不多说&#xff0c;直接上解决方法&#xff1a; 1、找到这两个文件&#xff08;每个人的位置不一样&#xff0c;像我是安装在D盘&#xff09; 2、分别点进去&#xff0c;右键—属性…

A Survey on Evaluation of Large Language Models

这是LLM相关的系列文章&#xff0c;针对《A Survey on Evaluation of Large Language Models》的翻译。 大型语言模型评价综述 摘要1 引言2 背景2.1 大语言模型2.2 AI模型评估 3 评估什么3.1 自然语言处理任务3.1.1 自然语言理解3.1.2 推理3.1.3 自然语言生成3.1.4 多语言任务…

vue——接口修改请求头——有些接口不需要请求头传递token——基础积累

最近在写后台管理系统的时候&#xff0c;遇到一个切换租户的功能。在请求接口的时候不需要传递token 直接上代码吧&#xff1a; 1.html代码 login2(this.user.id, this.ruleForm.tenantType) .then(this.afterLogin) .finally(() > {this.confirmLoading false;if (this…

ja3指纹和akamai指纹

问题&#xff1a; 请求失效&#xff0c;带上抓包软件却可以->检测ja3浏览器指纹 方法&#xff0c;python 安装curl_cffi库 pip install curl_cffi 查看浏览器指纹 https://tls.browserleaks.com/json python 原生request 缺少两个指纹 使用curl_cffi之后 可以看到结果…

多模态系列论文--BLIP 详细解析

论文地址&#xff1a;BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation 论文代码&#xff1a;https://github.com/salesforce/BLIP BLIP 1 研究动机及本文贡献2 相关工作2.1 ALBEF模型2.2 VLMO模型 3 本文贡献1--U…

LLaMA: Open and Efficient Foundation Language Models

背景 用最少的计算资源&#xff0c;解决了LLM大模型预测问题&#xff0c;训练了一些列的LLaMa模型&#xff0c;在参数量比较少的情况下&#xff0c;达到业界大模型效果。 主要贡献就是提升了LLM模型的训练速度和效率&#xff0c;在小容量的基础上&#xff0c;大大提升了模型的…

C语言 - AES软件加解密算法

概述 &#xff08;AES&#xff09;RIJNDAEL算法是一个数据块长度盒密钥长度都可变的分组加密算法&#xff0c;其数据块长度和密钥长度都可独立地选定为大于等于128位且小于等于256位的32位任意倍数。深入学习请参考《密码学》书籍&#xff0c;谢谢各位参阅。 验证环境&#xf…

Git基本操作:版本打Tag的作用以及基本操作流程

作用介绍 在git代码管理时&#xff0c;有时候我们想对某个特定的commit 添加标记&#xff0c;比如要标识版本信息&#xff0c;这时候就可以用的git中的打标签功能。 打tag就类似于我们看书放书签一样&#xff0c;以后可以直接用tag找到提交的位置&#xff0c;不然的话&#x…

devtools热部署的使用

引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency>idea开启热部署 改动后 ctrl …