当前位置: 首页 > news >正文

【ARM】ARM寄存器和异常处理

目录

1.指令的执行过程

2. ARM处理器概述

3.ARM指令集

4.ARM存储模型

5. ARM工作模式

6.ARM寄存器组织

(1)寄存器

(2)  ARM寄存器

(3)CPSR寄存器​​​​​​​

7. ARM异常处理

(1)异常

(2)异常源

(3)ARM异常模式

(4) ARM异常响应

(5)IRQ异常举例

(6) 异常优先级

(7) FIQ和IRQ



1.指令的执行过程

(1)一条指令的执行分为三个阶段

         1.取址:     

CPU将PC寄存器中的地址发送给内存,内存将其地址中对应的指令返回

到CPU中的指令寄存器(IR)

        2.译码:     

译码器对IR中的指令进行识别,将指令(机器码)解析成具体的运算    

        3.执行:     

控制器控制运算器中对应的运算单元进行运算,运算结果写入寄存器

(2) 每执行一条指令后PC的值会自动增加指向下一条指令

2. ARM处理器概述

ARM产品系列
早先经典处理器 包括ARM7、ARM9、ARM11家族
 Cortex-A系列

针对开放式操作系统的高性能处理器    

应用于智能手机、数字电视、智能本等高端运用 

Cortex-R系列

针对实时系统、满足实时性的控制需求    

应于汽车制动系统、动力系统等

Cortex-M系列

为单片机驱动的系统提供了低成本优化方案    

应用于传统的微控制器市场、智能传感器、汽车周边等

3f50e050b8b9498fab67459420349e50.jpeg

3.ARM指令集

(1)指令集: 处理器能识别的指令的集合称为指令集,不同架构的处理器指令集不同,指令集是处理器对开发者提供的接口

(2)大多数ARM处理器都支持两种指令集:

ARM指令集

 所有指令(机器码)都占用32bit存储空间    

代码灵活度高、简化了解码复杂度    

执行ARM指令集时PC值每次自增4

Thumb指令集

所有指令(机器码)都占用16bit存储空间    

代码密度高、节省存储空间    

执行Thumb指令集时PC值每次自增2

4.ARM存储模型

(1)ARM采用32位架构,基本数据类型有以下三种

Byte(字节)8bits
Halfword(半字)16bits
Word(字)32bits

(2)数据存储

Word型数据在内存的起始地址必须是4的整数倍    

Halfword型数据在内存的起始地址必须是2的整数倍    

注:即数据本身是多少位在内存存储时就应该多少位对齐,且ARM一般使用小端对齐

5. ARM工作模式

(1)ARM有8个基本的工作模式

User    非特权模式,一般在执行上层的应用程序时ARM处于该模式
FIQ 当一个高优先级中断产生后ARM将进入这种模式
IRQ当一个低优先级中断产生后ARM将进入这种模式
SVC当复位或执行软中断指令后ARM将进入这种模式
Abort 当产生存取异常时ARM将进入这种模式
Undef当执行未定义的指令时ARM将进入这种模式
System    使用和User模式相同寄存器集的特权模式
Monitor    为了安全而扩展出的用于执行安全监控代码的模式

(2)工作模式的理解

         不同模式拥有不同权限  

        不同模式执行不同代码  

        不同模式完成不同的功能

(3)ARM工作模式分类

按照权限              User为非特权模式(权限较低),其余模式均为特权模式(权限较高)
按照状态 FIQ、IRQ、SVC、Abort、Undef属于异常模式,即当处理器遇到异常后 会进入对应的模式

6.ARM寄存器组织

(1)寄存器

 概念寄存器是处理器内部的存储器,没有地址
作用一般用于暂时存放参与运算的数据和运算结果
分类包括通用寄存器、专用寄存器、控制寄存器

a64bfde11f264895a95b8bdf0dbab7ca.jpeg

(2)  ARM寄存器

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

eb7b8907447f4296a7f59ece9233cc9a.png

专用寄存器
R15(PC,Program Counter) 程序计数器,用于存储当前取址指令的地址
R14(LR,Link Register)

链接寄存器,一般有以下两种用途:    

> 执行跳转指令(BL/BLX)时,LR会自动保存跳转指令下一条指令的地址,程序需要返回时将LR的值复制到PC即可实现    

> 产生异常时,对应异常模式下的LR会自动保存被异常打断的指令的下一条指令的地址,异常处理结束后将LR的值复制到PC可实现程序返回

R13(SP,Stack Pointer)栈指针,用于存储当前模式下的栈顶地址
CPSR(Current Program Status Register)当前程序状态寄存器 

(3)CPSR寄存器

 CPSR寄存器分为四个域,[31:24]为条件域用F表示、[23:16]为状态域用S表示、[15:8]为预留域用X表示、[8:0]为控制域用C表示

45605903526648f5bd62eb106406c2e6.png

Bit[4:0][10000]User    [10001]FIQ     [10010]IRQ     [10011]SVC     [10111]Abort   [11011]Undef   [11111]System  [10110]Monitor
Bit[5] [0]ARM状态     [1]Thumb状态
 Bit[6] [0]开启FIQ     [1]禁止FIQ
 Bit[7][0]开启IRQ     [1]禁止IRQ
Bit[28] 

> 当运算器中进行加法运算且产生符号位进位时该位自动置1,否则为0    

> 当运算器中进行减法运算且产生符号位借位时该位自动置0,否则为1

Bit[29]    > 当运算器中进行加法运算且产生进位时该位自动置1,否则为0     > 当运算器中进行减法运算且产生借位时该位自动置0,否则为1
Bit[30]    当运算器中产生了0的结果该位自动置1,否则为0
Bit[31]     当运算器中产生了负数的结果该位自动置1,否则为0

7. ARM异常处理

(1)异常

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

1d9ed181a44f4b05bbd30f7311bb1609.jpeg

(2)异常源

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

ARM异常源
FIQ    快速中断请求引脚有效    
IRQ    外部中断请求引脚有效
 Reset复位电平有效
 Software Interrupt执行swi指令
Data Abort    数据终止
Prefetch Abort指令预取终止
 Undefined Instruction遇到不能处理的指令

(3)ARM异常模式

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

2be89d6fe0cf4612a1f771cf44166afe.png

(4) ARM异常响应

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

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

2.修改CPSR的值   

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

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

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

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

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

异常向量表

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

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

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

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

c995ed5810224419a0b3eda9b67ea03d.jpeg

注:ARM的异常向量表的基地址默认在0x00地址但可以通过配置协处理器来修改其地址

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

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

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

(5)IRQ异常举例

bc9850d3198b48e78e615c7144a31204.jpeg

(6) 异常优先级

9b0963e26c8f49fda71ad5cfd38a878b.jpeg

(7) FIQ和IRQ

 FIQ的响应速度比IRQ快    

        1. FIQ在异常向量表位于最末 ,可直接把异常处理写在异常向量表之后,省去跳转    

        2. FIQ模式有5个私有寄存器(R8-R12) ,执行中断处理程序前无需压栈保存寄存器,可直接处理中断    

        3. FIQ的优先级高于IRQ     

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

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

相关文章:

【ARM】ARM寄存器和异常处理

目录 1.指令的执行过程 2. ARM处理器概述 3.ARM指令集 4.ARM存储模型 5. ARM工作模式 6.ARM寄存器组织 &#xff08;1&#xff09;寄存器 &#xff08;2&#xff09; ARM寄存器 &#xff08;3&#xff09;CPSR寄存器​​​​​​​ 7. ARM异常处理 &#xff08;1&am…...

数仓建模【埋点设计与管理】

埋点设计与管理 埋点的作用 分析用户转化以及留存&#xff1a;分析用户偏好收集市场反馈保障用户数据安全定位异常其他作用 埋点数仓设计 数据进入数仓之前我们就需要设计好数仓表&#xff0c;埋点表的数据有几个特点&#xff1a; 数据量非常大&#xff0c;可能是所有数据集…...

Spring Clound介绍

Spring Cloud 是一系列框架的集合&#xff0c;它利用 Spring Boot 的开发便利性简化了分布式系统&#xff08;例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话和集群状态&#xff09;的开发。Spring Cloud 旨在为开发者…...

Redhat Linux忘记密码解决方案

1、重启系统 2、将光标移动到要启动的内核 3、按e编辑当前条目 4、将光标移动以Linux开头的行&#xff0c;此为内核命令行 5、在末尾添加人的rd.break 6、按ctrlx继续启动&#xff0c;如果发现输入的rd.break不能进入到伪系统&#xff0c;那么改为 rd.break consoletty0 (按ctr…...

对于子数组问题的动态规划

前言 先讲讲我对于这个问题的理解吧 当谈到解决子数组问题时&#xff0c;动态规划(DP)是一个强大的工具&#xff0c;它在处理各种算法挑战时发挥着重要作用。动态规划是一种思想&#xff0c;它通过将问题分解成更小的子问题并以一种递归的方式解决它们&#xff0c;然后利用这些…...

Instal IIS on Windows Server 2022 Datacenter

和以往版本一样&#xff0c;没有什么不同&#xff0c;So easy&#xff01; WinR - ServerManager.exe 打开服务器管理器&#xff0c;点击【添加角色和功能】&#xff0c;选择自己想要的角色和功能。 一、开始之前&#xff1a;帮助说明&#xff0c;点击【下一步】&#xff1b;…...

飞天使-k8s知识点30-kubernetes安装1.28.0版本-使用containerd方式

文章目录 安装前准备containerd 配置内核参数优化安装nerdctl以上是所有机器全部安装开始安装初始化&#xff0c;这步骤容易出问题&#xff01; 安装前准备 内核升级包的md5,本人已验证&#xff0c;只要是这个md5值&#xff0c;放心升级 1ea91ea41eedb35c5da12fe7030f4347 ke…...

Oracle 误操作insert delete update 数据回滚

查询回滚数据 select * from tablename AS OF TIMESTAMP TO_TIMESTAMP(2023-12-29 10:29:00,yyyy-mm-dd hh24:mi:ss) where not exists (select 1 from tablename A where A.xh tablename.xh and A.TIME tablename.TIME); TO_TIMESTAMP(2023-12-29 10:29:00,yyyy-mm-dd h…...

Linux系统(CentOS)下安装配置 Nginx 超详细图文教程

一、下载并安装 1.打开nginx官网并点击右侧的download&#xff0c;Nginx官网下载地址 2.选择稳定版本 我放在/usr/local/nginx/下&#xff0c;新建文件夹 mkdir /usr/local/nginx/ 通过xftp传输到Linux的服务器上&#xff0c;这里方法不过多复述。 或者如果Linux联网&#xf…...

追求完美用户体验,从变量名设计的细节抓起

在一个安静的办公室里&#xff0c;卧龙和凤雏正坐在电脑前忙碌地工作着。阳光透过窗户洒在他们的脸上&#xff0c;映照出专注的神情。 “变量命名让人摸不着头脑&#xff0c;光看变量名很难搞清楚它的用途。”卧龙眉头紧皱&#xff0c;表情严肃地说道。 “哦&#xff1f;具体是…...

matlab实现K均值聚类

在MATLAB中实现聚类分析&#xff0c;可以使用MATLAB内置的聚类函数&#xff0c;如kmeans&#xff08;用于K均值聚类&#xff09;&#xff0c;linkage和cluster&#xff08;用于层次聚类&#xff09;&#xff0c;或者使用MATLAB的统计和机器学习工具箱中的其他函数。 以下是一个…...

详解BOM编程

华子目录 BOM编程window对象常见的window对象的属性常见的window对象的方法注意 history对象history对象的属性history对象的方法 screen 对象navigator 对象属性方法 location对象属性方法示例 BOM编程 JavaScript本质是在浏览器中运行&#xff0c;所以JavaScript提供了BOM&a…...

情感分类学习笔记(1)

文本情感分类&#xff08;二&#xff09;&#xff1a;深度学习模型 - 科学空间|Scientific Spaces 一、代码理解 cw lambda x: list(jieba.cut(x)) #定义分词函数 您给出的代码定义了一个使用 jieba 分词库的分词函数。jieba 是一个用于中文分词的 Python 库。该函数 cw 是…...

EtherCAT运动控制器Delta机械手应用

ZMC406硬件介绍 ZMC406是正运动推出的一款多轴高性能EtherCAT总线运动控制器&#xff0c;具有EtherCAT、EtherNET、RS232、CAN和U盘等通讯接口&#xff0c;ZMC系列运动控制器可应用于各种需要脱机或联机运行的场合。 ZMC406支持6轴运动控制&#xff0c;最多可扩展至32轴&#…...

物联网杀虫灯—新型的环保杀虫设备

型号推荐&#xff1a;云境天合TH-FD2S】物联网杀虫灯是一种新型环保杀虫设备&#xff0c;其中风吸式太阳能杀虫灯作为其一种特殊类型&#xff0c;展现了独特的工作原理和优势。 风吸式太阳能杀虫灯以太阳能电池板为电源&#xff0c;白天储存电源&#xff0c;晚上为杀虫灯提供电…...

加盟零食店的真是大冤种

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 我一朋友&#xff0c;在老家县城去年失业没事干&#xff0c;手里有一点钱但不多&#xff0c;就想着自己干点啥 。最后经多方打听考察&#xff0c;加盟了一个零食店&#xff0c;前前后后花去了近五六十万&#xff0c…...

力扣刷题--数组--第三天

今天再做两道二分查找的题目&#xff0c;关于二分查找的知识可看我前两篇博客。话不多说&#xff0c;直接开干&#xff01; 题目1&#xff1a;69.x 的平方根 题目详情&#xff1a;   给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。由于返回类型是整数&#…...

开源即时通讯IM框架 MobileIMSDK v6.5 发布

一、更新内容简介 本次更新为次要版本更新&#xff0c;进行了bug修复和优化升级&#xff08;更新历史详见&#xff1a;码云 Release Notes、Github Release Notes&#xff09;。 MobileIMSDK 可能是市面上唯一同时支持 UDPTCPWebSocket 三种协议的同类开源IM框架。轻量级、高…...

React 第二十七章 Hook useMemo

useMemo 函数可以用于缓存计算结果&#xff0c;以避免不必要的重复计算。 在React的函数组件中&#xff0c;当组件重新渲染时&#xff0c;函数组件内的所有代码都会重新执行。有些计算可能是非常消耗资源的&#xff0c;例如进行复杂的计算或进行网络请求。如果这些计算的结果在…...

自己写的爬虫小案例

网址&#xff1a;aHR0cDovL2pzc2NqZ3B0Lmp4d3JkLmdvdi5jbi8/dXJsPS92aWV3L3dvcmtpbmdVbml0L3dvcmtpbmdVbml0Lmh0bWw 这串代码能够爬取勘察单位企业的详细信息。 import requests import time import csv f open(勘察单位公司信息.csv,w,encodingutf-8,newline) csv_writer …...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

大数据治理的常见方式

大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法&#xff0c;以下是几种常见的治理方式&#xff1a; 1. 数据质量管理 核心方法&#xff1a; 数据校验&#xff1a;建立数据校验规则&#xff08;格式、范围、一致性等&#xff09;数据清洗&…...

React核心概念:State是什么?如何用useState管理组件自己的数据?

系列回顾&#xff1a; 在上一篇《React入门第一步》中&#xff0c;我们已经成功创建并运行了第一个React项目。我们学会了用Vite初始化项目&#xff0c;并修改了App.jsx组件&#xff0c;让页面显示出我们想要的文字。但是&#xff0c;那个页面是“死”的&#xff0c;它只是静态…...