lv11 嵌入式开发 ARM体系结构理论基础(异常、微架构)4

1 异常概念

处理器在正常执行程序的过程中可能会遇到一些不正常的事件发生

这时处理器就要将当前的程序暂停下来转而去处理这个异常的事件    

异常事件处理完成之后再返回到被异常打断的点继续执行程序

2 异常处理机制

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

3 ARM异常源

概念    

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

ARM异常源    

  1. FIQ                快速中断请求引脚有效(速度最快的中断)             
  2. IRQ                外部中断请求引脚有效    
  3. Reset            复位电平有效    
  4. Software Interrupt    执行swi指令(软件中断)     
  5. Data Abort            数据终止(访问无效内存地址、数据损坏或其他类似问题导致)     
  6. Prefetch Abort        指令预取终止(无效的指令地址或类似的预取相关问题导致的异常)     
  7. Undefined Instruction    遇到不能处理的指令(取指令译码不认识)

4 ARM异常模式

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

注意:Arm模式5种与异常源7种,不要搞混

5 ARM异常响应

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

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

2.修改CPSR的值     

        2.1.修改中断禁止位禁止相应的中断     

        2.2.修改模式位进入相应的异常模式                  

        2.3.修改状态位进入ARM状态    

3.保存返回地址到对应异常模式下的LR_<mode>    

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

不管之前是Thumb状态还是ARM状态,处理异常必须在ARM状态下。

因为异常处理程序是我们自己写的,地址是不确定的,那么系统自动跳转是找不到的,系统会跳转到固定的位置,异常向量表。

5 异常向量表

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

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

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

> 因为异常向量表空间有限一般我们不会再这里,写异常处理程序,而是在对应的位置写一条跳 转指令使其跳转到指定的异常处理程序的入口    

注:ARM的异常向量表的基地址默认在0x00地址        

但可以通过配置协处理器来修改其地址

7 异常返回

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

1.将SPSR_<mode>的值复制给CPSR      

        使处理器恢复之前的状态                     

2.将LR_<mode>的值复制给PC      

        使程序跳转回被打断的地址继续执行

8 IRQ异常举例

异常向量表中N是异常处理程序的跳转地址

M是用户程序的下个执行地址,lr保存。

整个过程CPSR保存的永远是当前程序运行状态    

SPSR只是异常时对原来的CPSR进行备份

9 异常优先级

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

10 FIQ和IRQ

 1. FIQ在异常向量表位于最末        

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

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

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

3. FIQ的优先级高于IRQ     

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

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

11 练习

以IRQ为例,简述ARM处理器在正常执行程序过程中如果遇到IRQ异常会自动完成哪些动作以及处理完异常后如何返回到正常程序

1 保存当前状态:

spsr_<irq> = cpsr  保存(CPSR)等寄存器的值,保存lr_irq的值以便在处理完异常后能够恢复到中断发生前的状态。

2 跳转到IRQ异常处理模式:
irq模式切换、irq禁止(防止打断)、cpsr修改为arm状态。为了确保在处理IRQ异常时能够使用相关的寄存器和堆栈。
跳转至异常向量表,寻找irq的地址,地址中存在用户自己写的异常处理程序地址,执行异常处理程序。

3 模式恢复
包括恢复之前的执行模式、寄存器的值等。cpsr = spsr,程序PC指针指向lr_irq,继续执行原始的程序。

12 微架构

ARM指令流水线    

ARM7采用3级流水线    

ARM9采用5级流水线    

Cortex-A9采用8级流水线    

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

PC的作用(取指)    

不管几级流水线,PC指向的永远是当前正在取指的指令,而当前正在执行的指令的地址为PC-8(PC地址减去2个4字节即取址)

指令流水线机制

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

多核处理器

多核处理器    

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

作用    

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

资源    

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

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

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

相关文章

BMVC 23丨多模态CLIP:用于3D场景问答任务的对比视觉语言预训练

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 论文链接&#xff1a;https://arxiv.org/abs/2306.02329 摘要&#xff1a; 训练模型将常识性语言知识和视觉概念从 2D 图像应用到 3D 场景理解是研究人员最近才开始探索的一个有前景的方向。然而&#xff0c…

地区 IP 库

地区 & IP 库 yudao-spring-boot-starter-biz-ip (opens new window)业务组件&#xff0c;提供地区 & IP 库的封装。 #1. 地区 AreaUtils (opens new window)是地区工具类&#xff0c;可以查询中国的省、市、区县&#xff0c;也可以查询国外的国家。 它的数据来自 …

kubectl声明式资源管理命令

目录 一、声明式资源管理介绍&#xff1a; 二、声明式相关命令&#xff1a; 1. 语法格式&#xff1a; 2. 查看资源配置清单&#xff1a; 3. 解释资源配置清单&#xff1a; 4. 修改资源配置清单并应用&#xff1a; 4.1 离线修改&#xff1a; 4.2 在线修改&#xff1a; 5. 删除资…

【qemu逃逸】XCTF 华为高校挑战赛决赛-pipeline

前言 虚拟机用户名: root 无密码 设备逆向与漏洞分析 程序没有去符合, 还是比较简单. 实例结构体如下: 先总体说一下流程: encode 为 base64 编码函数, decode 为 base64 解码函数. 然后 encPipe 和 decPipe 分别存放编码数据和解码数据, 分别有四个: 其中 EncPipeLine 中…

ElementUI的el-upload上传组件与表单一起提交遇到的各种问题以及解决办法(超详细,每个步骤都有详细解读)

背景: 使用ruoyi-vue进行2次开发,需要实现表单与文件上传一起提交,并且文件上传有4个,且文件校验很复杂,因此ruoyi-vue集成的上传组件FileUpload调试几天后发现真不太适用,最终选择element UI原生组件el-upload(FileUpload也是基于el-upload实现的),要实现表单与文件同…

Unity地面交互效果——4、制作地面凹陷轨迹

大家好&#xff0c;我是阿赵。   上一篇介绍了曲面细分着色器的基本用法和思路&#xff0c;这一篇在曲面细分的基础上&#xff0c;制作地面凹陷的轨迹效果。 一、思路分析 这次需要达到的效果是这样的&#xff1a; 从效果上看&#xff0c;这个凹陷在地面下的轨迹&#xff0…

PostMan授权认证使用

Authorization 对于很多应用&#xff0c;出于安全考虑我们的接口并不希望对外公开。这个时候就需要使用授权(Authorization)机制。 授权过程验证您是否具有访问服务器所需数据的权限。 当发送请求时&#xff0c;通常必须包含参数&#xff0c;以确保请求具有访问和返回所需数据…

蓝桥杯算法竞赛第一周题型总结

本专栏内容为&#xff1a;蓝桥杯学习专栏&#xff0c;用于记录蓝桥杯的学习经验分享与总结。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &#x1f339;&#x1f33…

skynet学习笔记02— skynet介绍、skynet基础API与环境变量

01、Skynet与Actor模型 在系统Skynet之前&#xff0c;先了解一下Skynet与Actor模型&#xff0c;下列是风云大佬的介绍以及一个大佬的博客 https://github.com/cloudwu/skynet/wiki/GettingStartedhttps://blog.csdn.net/qq769651718/article/details/79432793 02、Skynet基础…

kafka开启SSL认证(包括内置zookeeper开启SSL)

zookeeper和kafka的SSL开启都可单独进行 生成SSL证书 使用jre自带的keytool工具生成&#xff0c;linux和windows下生成的证书可以通用 生成含有一个私钥的keystore文件&#xff0c;有效期10年&#xff08;本文证书密码统一使用test123&#xff09; keytool -genkeypair -ali…

acwing算法基础之搜索与图论--朴素版dijkstra算法

目录 1 基础知识2 模板3 工程化 1 基础知识 朴素版dijkstra算法的关键步骤&#xff1a; 初始化d[1]0&#xff0c;d[2~n]正无穷&#xff0c;例如0x3f3f3f3f。用集合S来表示当前已被确定最小距离的结点们。遍历每一个结点&#xff1a;找到不在S中的且距离结点1最近的结点&#…

python升级pip的时候一直失败

如图,一直提示使用 python.exe -m pip install --upgrade pip 进行升级pip,但是执行这句命令又不成功.然后综合了几篇文章以后使用了下面的命令可以升级了 python -m pip install --upgrade pip --user -i https://mirrors.aliyun.com/pypi/simple/ 主要是在推荐的语句上使用…

润色论文Prompt

你好&#xff0c;我现在开始写论文了&#xff0c;我希望你可以扮演帮我润色论文的角色我写的论文是关于xxxxx领域的xxxxx&#xff0c;我希望你能帮我检查段落中语句的逻辑、语法和拼写等问题我希望你能帮我检查以下段落中语句的逻辑、语法和拼写等问题同时提供润色版本以符合学…

K8S篇之Pod中的资源限额

1、Pod定义requests、limits相关参数 在k8s中&#xff0c;全面限制一个应用及其中的pod所能占用的资源配额&#xff0c;具体可以使用下面三种方式&#xff1a; 1、定义每个pod的资源配额相关参数&#xff0c;如CPU/memory的request、limits&#xff1b; 2、自动为每个没有定义资…

AI搞钱——工具篇之视频、音频转文字

AI搞钱 工具篇之视频、音频转文字Memo AI &#xff1a;本地的语音转文字工具WhisperpyvideotransnottaAccurate AI万兴优转 视频转换 压缩工具v14.1.19.20 工具篇之视频、音频转文字 哈喽各位小伙伴们&#xff01;今天我要给大家推荐几款视频、音频转文字的好用工具。 Memo A…

Android Studio新建项目下载依赖慢,只需一个操作解决

新建的安卓工程&#xff0c;下载依赖贼慢怎么办&#xff1f;水一篇吧。 首先新建工程&#xff0c;建好以后项目就自动开始下载了&#xff0c;底部开始出现进度条&#xff0c;但是进度条一直不怎么动&#xff0c;网速也就十几k&#xff0c;要是等他下载得下一天。 直入主题&…

第四节(2):修改WORD中表格数据的方案

《VBA信息获取与处理》教程(10178984)是我推出第六套教程&#xff0c;目前已经是第一版修订了。这套教程定位于最高级&#xff0c;是学完初级&#xff0c;中级后的教程。这部教程给大家讲解的内容有&#xff1a;跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网…

AttributeError: module ‘tensorflow‘ has no attribute ‘contrib‘解决办法

在TensorFlow2环境下执行1.X版本的代码时报错&#xff1a; AttributeError: module ‘tensorflow‘ has no attribute ‘contrib‘ 当然第一时间想到的是利用 如下代码 来解决问题&#xff08;大部分情况都是这样&#xff09;&#xff0c; tf.compat.v1但是又出现以下报错 Att…

Django之三板斧的使用,全局配置文件介绍,request对象方法,pycharm链接数据库,Django链接数据库,ORM的增删改查

【1】三板斧(3个方法)的使用 Httpresponse() 括号内写什么字符串&#xff0c;返回的就是什么字符串返回的是字符串 render(request&#xff0c; 静态文件 ) request是固定的静态文件是写在templates文件夹里面的&#xff0c;如&#xff0c;HTML文件 redirect( 重定向的地址 ) 重…

windows uvc

Windows平台使用DirectShow获取UVC摄像头上按键后的抓拍图 - 知乎 (zhihu.com) DirectShow中获得摄像头的DevicePath, 得到如下不同效果-CSDN博客 linux 和 windows 下用ffmpeg 操作usb摄像头_linuxffmpeg 播放本地文件摄像头 命令行-CSDN博客 ./ffplay -f dshow -i video&qu…