嵌入式面经-ARM体系架构-寄存器与异常处理

  • ARM寄存器组织

    • 寄存器概念

      • 寄存器是处理器内部的存储器,没有地址

    • 寄存器作用

      • 一般用于暂时存放参与运算的数据和运算结果

    • 在某个特定模式下只能使用当前模式下的寄存器,一个模式下特有的寄存器别的模式下不能使用

      • 一共是40个寄存器

    • 寄存器分类

      • 通用寄存器

      • 专用寄存器

        • R15(PC):程序计数器,用于存储当前取址指令的地址

        • R14(LR):链接寄存器,执行跳转指令(BL/BLX)时,LR会自动保存跳转指令下一条指令的地址,产生异常时,对应异常模式下的LR会自动保存被异常打断的指令的下一条指令的地址

        • R13(SP):栈指针:用于存储当前模式下的栈顶地址

        • CPSR:当前程序状态寄存器、控制当前CPU处于哪种状态

      • 控制寄存器

  • ARM异常处理

    • 异常的概念

      • 处理器正常执行程序的过程中可能会遇到一些不正常的事情(例如中断),这是处理器会暂停当前的程序转而处理这个异常事件,等处理结束后再返回被异常打断的点继续执行原本的程序。

    • 异常处理机制

      • 不同处理器上应对异常的流程大体相同,但是再具体实现上可能会有所区别,例如处理器遇到哪些事情会被认定为异常事件、遇到异常事件后处理器有哪些动作、处理器将如何转到异常处理程序等这些细节被成为处理器的异常处理机制

      • arm异常源

        • 导致异常发生的事件成为异常源

        • 异常源

          • FIQ:快速中断请求,比IRQ优先级高

          • IRQ:外部中断请求

          • Reset:复位

          • Software Interrupt:执行swi指令

          • Data Abort:数据终止

          • Prefetch Abort:指令预取终止

          • Undefined Instruction:遇到不能处理的指令

        • 异常模式

          • ARM的基本工作模式中有五种工作模式

          • 在arm工作中会经常遇到模式之间的切换

        • 注意区分异常源和异常模式

    • ARM异常响应

      • 高优先级中断可以打断低优先级中断,同等优先级中断和比自己更低优先级的中断不能打断正在进行的中断

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

        • 拷贝CPSR寄存器中的内容到对应异常模式下的SPSR寄存器中

        • 修改CPSR寄存器的值:修改中断禁止位禁止相应的中断,修改模式位进入相应的异常模式,修改状态位进入ARM状态 (处理异常必须切换成ARM模式)

        • 保存放回地址到对应异常模式下的LR(R14_*)寄存器中

        • 设置PC(R15)寄存器为相应的异常向量

      • 当前指令执行完才会处理异常,比如假如正在执行一条指令,这时突然来了异常,不管这条指令是刚刚执行还是已经将要结束,都要先执行完才会处理异常

    • 异常向量表

      • 因为异常向量表空间有限不会在这里写异常处理程序,而是在对应的位置写一条跳转指令使其跳转到指定的异常处理程序的入口,这个异常处理程序的入口是固定的,其实也就是异常处理的回调函数。

      • 遇到异常后处理器自动将PC(R15)寄存器修改为对应的地址

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

      • 异常向量表的本质是内存中的一段代码(32字节)

    • 异常优先级

      • 多个异常同时产生时的顺序

        • Reset:优先级最高

        • Data Abort

        • FIQ

        • IRQ

        • Prefetch Abort

        • Software Interrupt

        • Undefined instruction

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

      • 进入IRQ异常后,首先就是要保护现场,也就是将原本寄存器中的数据存储起来,因为IRQ模式和User模式下,很多寄存器是公用的,如果直接操作会把之前的覆盖掉

      • 为什么只有r8到r12是FIQ特有的?如果将所有的寄存器都变为自己特有的,不是更快吗?

        • 考虑到不同模式之间要交互数据,比如USER要和FIQ模式交互数据,肯定是放到共有的寄存器比较方便

    • ARM微架构

      • 硬件只有一套,但是多条流水线同时进行,如果只有一条流水线,取址后就被闲置了,所以要多流水线进行,不断进行取址

      • 多核处理器

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

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

相关文章

Vue3.0里为什么要用 Proxy API 替代 defineProperty API

一、Object.defineProperty 定义:Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象 为什么能实现响应式 通过defineProperty 两个属性,get及set get 属性的 getter 函…

Br 算法

基于google的brotli开源&#xff0c;实现Br算法。 #include <brotli/encode.h> #include <brotli/decode.h>namespace br {/*compress unsigned char* content,if ok return non empty unsigned char * */std::string compress_string(const std::string& c…

【Web】浅聊Hessian反序列化之打Rome出网不出网

目录 前言 出网——JdbcRowSetImpl 不出网——SignedObject 打二次反序列化 前文&#xff1a;【Web】浅聊Java反序列化之玩转Hessian反序列化的前置知识 前言 正如我们前文所说&#xff0c;当Hessian反序列化Map类型的对象的时候&#xff0c;会自动调用其put方法&#xff…

pytorch的梯度图与autograd.grad和二阶求导

前向与反向 这里我们从 一次计算 开始比如 zf(x,y) 讨论若我们把任意对于tensor的计算都看为函数&#xff08;如将 a*b&#xff08;数值&#xff09; 看为 mul(a,b)&#xff09;&#xff0c;那么都可以将其看为2个过程&#xff1a;forward-前向&#xff0c;backward-反向在pyto…

常有的正则表达式

在项目开始实践中&#xff0c;我们经常遇到一些校验手机号、座机号、小数位、特殊字符之类的正则表达式&#xff0c;这里根据开发经验罗列了一下常见的正则表达式。原文详见《常用正则表达式》 正则表达式 校验数字 验证0-7.1&#xff08;不包含0和7.1&#xff09; 验证0-7…

如何提高API接口的性能和设计安全可靠的API

如何提高API接口的性能 下图显示了提高 API 性能的 5 种常见技巧。 分页 这是在结果集较大时常用的优化方法。结果会以流式方式传回客户端&#xff0c;以提高服务响应速度。 异步日志 同步日志每次调用都要处理磁盘&#xff0c;会降低系统速度。异步日志会先将日志发送到无…

《手把手教你》系列技巧篇(三十)-java+ selenium自动化测试- Actions的相关操作下篇(详解教程)

1.简介 本文主要介绍两个在测试过程中可能会用到的功能&#xff1a;Actions类中的拖拽操作和Actions类中的划取字段操作。例如&#xff1a;需要在一堆log字符中随机划取一段文字&#xff0c;然后右键选择摘取功能。 2.拖拽操作 鼠标拖拽操作&#xff0c;顾名思义就是&#xff…

文本向量评测MTEB和C-MTEB

文章目录 简介MTEBC-MTEB参考资料 简介 MTEB(Massive Text Embedding Benchmark)是目前评测文本向量很重要的一个参考&#xff0c;其榜单也是各大文本向量模型用来展示与其他向量模型强弱的一个竞技台。 C-MTEB则是专门针对中文文本向量的评测基准。 MTEB MTEB的目的是为了…

vuepress-theme-vdoing博客搭建教程

搭建流程 前言 这是笔者搭建个人博客所经历的流程&#xff0c;特附上笔记 笔者个人博客地址&#xff1a;沉梦听雨的编程指南 一、主题介绍 本博客使用的主题为&#xff1a;vuepress-theme-vdoing&#xff0c;相关介绍和使用方法可以参考该主题的官方文档 官方文档快速上手…

什么是PROFIBUS DP网络布线的1米原则?分支线又是什么?

在上期的文章中&#xff0c;我们介绍了 PROFIBUS DP 网络在连接时涉及到的硬件&#xff1a;DP 线缆、PROFIBUS 插头、终端电阻、中继器和有源终端等。 在今天的文章中&#xff0c;就让我们了解一下在 PROFIBUS DP 网络布线时&#xff0c;需要注意的原则有哪些。 一米原则 当 …

图分割 Graph Partition 学习笔记2

文章目录 前言一、Metis原理二、Metis优点三、Metis软件包安装流程参考链接 前言 今天来学一下Metis算法&#xff0c;经过搜索发现这个算法还是蛮多人在讲解的&#xff0c;我也在这里浅浅记录一下~ 一、Metis原理 METIS是一种层次化的分割算法&#xff08;multi-level partitio…

梯度剪裁: torch.nn.utils.clip_grad_norm_()

梯度剪裁: torch.nn.utils.clip_grad_norm_() 一、原理 pytorch中梯度剪裁方法为 torch.nn.utils.clip_grad_norm_(parameters, max_norm, norm_type2)1。三个参数&#xff1a; parameters&#xff1a;希望实施梯度裁剪的可迭代网络参数 max_norm&#xff1a;该组网络参数梯…

第六代Spartan FPGA迎接智能边缘互联新挑战

预计到2028年&#xff0c;物联网设备的数量将增加一倍以上&#xff0c;处理能力需求也将同步增长。设备数量的激增会推动产生对于更高数量I/O的需求、对更通用I/O的需求&#xff0c;以及对于边缘端安全解决方案的需求&#xff1b;处理能力需求的提升则需要更强且更有效率的处理…

勾八头歌之数据科学导论—数据采集实战

一、数据科学导论——数据采集基本概念 第1关&#xff1a;巧妇难为无米之炊 第2关&#xff1a;数据采集概念与内涵 二、数据科学导论——数据采集实战 第1关&#xff1a;单网页爬取 import urllib.request import csv import re# ********** Begin ********** # dataurllib.r…

java项目安全性与权限管理实践与探讨

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一. 身份验证和授权 二. 输入验证和过滤 2.1. 添加OW…

Spring MVC RequestToViewNameTranslator原理解析

在Spring MVC框架中&#xff0c;RequestToViewNameTranslator是一个接口&#xff0c;它用于根据HTTP请求的信息生成对应的视图名称。这一机制在构建动态视图名称的场景中非常有用&#xff0c;尤其是当视图名称需要根据请求参数或请求路径动态生成时。本文将详细解析RequestToVi…

电机应用-步进电机进阶驱动

步进电机梯形加减速 什么是梯形加减速 假设该装置使用步进电机实现物体X的移动&#xff0c;系统要求从A点出发&#xff0c;到B点停止&#xff0c;移动的时间越短越好且系统稳定。 根据步进电机的特性&#xff0c;最大程度加大电机转速&#xff08;提高脉冲频率&#xff09;&a…

10.Java---clone+内部类

一次浅拷贝的过程 打印结果: 一次深拷贝的过程 打印结果: 抽象类和接口的区别 外部类&内部类 1.内部类由static修饰时,不可以是变量 这样就是可以的,他就代表一个常量 2.怎么实例化内部类 当然不可以直接实例化啦! 是这么实例化的,看起来比我们平时麻烦了很多呢! …

SpringCloud OpenFeign 服务接口调用

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第四篇&#xff0c;即介绍 Feign 和 OpenFeign 服务接口调用。 二、概述 2.1 Feign 是什么 Feign 是一…

牛客网KY267 对称平方数1

题目 描述&#xff1a; 打印所有不超过256&#xff0c;其平方具有对称性质的数。如2&#xff0c;11就是这样的数&#xff0c;因为2*24&#xff0c;11*11121。 输入描述&#xff1a; 无任何输入数据 输出描述&#xff1a; 输出具有题目要求的性质的数。如果输出数据不止一组&…