12.4 ARM异常处理

目录

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.hqwc.cn/news/21427.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解netfilter和iptables

目录 Netfilter的设计与实现 内核数据包处理流 netfilter钩子 钩子触发点 NF_HOOK宏与Netfilter裁定 回调函数与优先级 iptables 内核空间模块 xt_table的初始化 ipt_do_table() 复杂度与更新延时 用户态的表&#xff0c;链与规则 conntrack Netfilter(结合iptable…

计算机网络概述(一)

因特网概述 网络&#xff0c;互联网与因特网的区别联系&#xff1a; 以上是使用有线和无线链路连接的两个网络。那么&#xff0c;要让这两个网络连接起来&#xff0c;就需要路由器。若干个网络通过多个路由器互联起来&#xff0c;就称为了互联网。 因特网是当今世界上最大的互…

prometheus采集服务的jmx数据,grafana通过dashboard展示jmx数据

prometheus采集服务的jmx数据&#xff0c;grafana通过dashboard展示jmx数据 一、下载prometheus二、解压prometheus三、查看prometheus目录四、查看prometheus版本五、查看prometheus的配置文件六、启动prometheus七、登陆prometheus八、查看prometheus jmx九、下载grafana十、…

Orangepi Zero2 全志H616简介

一、简介 Linux 系统 &#xff0c;平台是 ARM 架构 特性 CPU 全志H616四核64位1.5GHz高性能Cortex-A53处理器 GPU MaliG31MP2 SupportsOpenGLES1.0/2.0/3.2、OpenCL2.0 运行内存 1GBDDR3(与GPU共享&#xff09; 存储 TF卡插槽_16G,测试128G可支持、2MBSPIFlash WIFI蓝牙 AW8…

kettle开发-Day40-AI分流之case/switch

前言&#xff1a; 前面我们讲到了很多关于数据流的AI方面的介绍&#xff0c;包括自定义组件和算力提升这块的&#xff0c;今天我们来学习一个关于kettle数据分流处理非常重要的组件Switch / Case 。当我们的数据来源于类似日志、csv文件等半结构化数据时&#xff0c;我们需要在…

node.js

文章目录 包含Buffer概述创建操作 软件运行过程线程与进程fs模块写入文件追加流式写入使用场景 读取文件文件流式读取读取场景 复制案例内存占有量 重命名和移动删除文件夹操作创建读取删除 查看文件的资源相对路径bug path模块http协议创建http服务器x获取请求体获取请求报文案…

Maven -- <dependencyManagement>管理子项目版本

背景&#xff1a; 一个旧项目&#xff0c;想使用mybatis-plus&#xff0c;想着这是比较基础的依赖包&#xff0c;就在父项目中添加对应依赖&#xff0c;如下: <!-- 依赖声明 --><dependencyManagement><dependencies><!-- mybatis-plus 依赖配置 -->&l…

JavaWeb(1)——HTML、CSS、JS 快速入门

JavaWeb 是使用 Java 技术来构建 Web 应用程序的一种方法。 HTML&#xff08;超文本标记语言&#xff0c;负责网页的结构&#xff09;是一种用于创建网页结构和内容的标记语言。它由一系列标签组成&#xff0c;每个标签都有特定的功能。开发人员可以使用 HTML 来定义页面的结构…

文字识别(OCR)介绍与开源方案对比

目录 文字识别&#xff08;OCR&#xff09;介绍与开源方案对比 一、OCR是什么 二、OCR基本原理说明 三、OCR基本实现流程 四、OCR开源项目调研 1、tesseract 2、PaddleOC 3、EasyOCR 4、chineseocr 5、chineseocr_lite 6、cnocr 7、商业付费OCR 1&#xff09;腾讯…

Self-Attention Cross-Attention

transformer的细节到底是怎么样的&#xff1f;Transformer 连环18问&#xff01; 4.1 从功能角度&#xff0c;Transformer Encoder的核心作用是提取特征&#xff0c;也有使用Transformer Decoder来提取特征。例如&#xff0c;一个人学习跳舞&#xff0c;Encoder是看别人是如何…

前端调整滚动条的外观样式

前端调整滚动条的外观样式 css主要分三个步骤 1、设置滚动条宽度 ::-webkit-scrollbar { width: 5px; } 效果&#xff1a;分别设置50px和5px宽度 2、设置里面小滑块的样式 ::-webkit-scrollbar-thumb {border-radius: 5px;-webkit-box-shadow: inset 0 0 5px rgba(0,0,0…

【Unity面试篇】Unity 面试题总结甄选 |Unity性能优化 | ❤️持续更新❤️

前言 关于Unity面试题相关的所有知识点&#xff1a;&#x1f431;‍&#x1f3cd;2023年Unity面试题大全&#xff0c;共十万字面试题总结【收藏一篇足够面试&#xff0c;持续更新】为了方便大家可以重点复习某个模块&#xff0c;所以将各方面的知识点进行了拆分并更新整理了新…