嵌入式面经-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 函…

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

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

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

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

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

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

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

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

文本向量评测MTEB和C-MTEB

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

vuepress-theme-vdoing博客搭建教程

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

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

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

图分割 Graph Partition 学习笔记2

文章目录 前言一、Metis原理二、Metis优点三、Metis软件包安装流程参考链接 前言 今天来学一下Metis算法,经过搜索发现这个算法还是蛮多人在讲解的,我也在这里浅浅记录一下~ 一、Metis原理 METIS是一种层次化的分割算法(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。三个参数: parameters:希望实施梯度裁剪的可迭代网络参数 max_norm:该组网络参数梯…

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

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

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

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

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

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

10.Java---clone+内部类

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

SpringCloud OpenFeign 服务接口调用

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

C++程序设计-练手题集合【期末复习|考研复习】

前言 总结整理不易,希望大家点赞收藏。 给大家整理了一下C程序设计中的练手题,以供大家期末复习和考研复习的时候使用。 C程序设计系列文章传送门: 第一章 面向对象基础 第四/五章 函数和类和对象 第六/七/八章 运算符重载/包含与继承/虚函数…

dolphin schedulerAPI调用(二)——创建任务

(作者:陈玓玏) API文档地址:http://192.168.3.100:21583/dolphinscheduler/swagger-ui/index.html?languagezh_CN&langcn#/task%20definition%20related%20operation/createTaskDefinitionUsingPOST_1 实际使用中&#x…

场的概念---数量场(标量场)和矢量场介绍理解

目录 一、场的概念 二、场的分类 三、数量场(标量场)的等值面 四、矢量场中的矢量线 矢量线方程推导: 一、场的概念 场在数学上是指一个向量到另一个向量或数的映射。场指物体在空间中的分布情况。场是用空间位置函数来表征的。在物理学…

雾锁王国专用服务器设置方法,基于阿里云1分钟开服!

阿里云雾锁王国服务器搭建教程是基于计算巢服务,3分钟即可成功创建Enshrouded游戏服务器,阿里云8核32G雾锁王国专用游戏服务器90元1个月、271元3个月,阿里云服务器网aliyunfuwuqi.com亲自整理雾锁王国服务器详细搭建教程: 一、前…

全自动内衣洗衣机什么牌子好?热心推荐四款全能硬核的内衣洗衣机

内衣洗衣机这一产品是专为有特殊需求的人士所研发的,其的容量往往都比较小,并且体积也很小巧,安装都非常便捷,作为“家中第二台”补充式洗衣机被很多人推崇,可以作为贴身衣物的专用洗衣机,那么这种内衣洗衣…