ARM体系结构与异常处理

news2025/1/12 13:11:46

目录

一、ARM体系架构

1、ARM公司概述

ARM的含义    

ARM公司    

2.ARM产品系列

3.指令、指令集

指令    

 指令集    

ARM指令集

 ARM指令集    

Thumb指令集  (属于ARM指令集)

4.编译原理

5.ARM数据类型

字节序

大端对齐    

小端对齐    

6.ARM工作模式

1.ARM工作模式分类

7.寄存器

1.专用寄存器

2.CPSR寄存器

二、ARM异常处理

1.异常

    概念    

 异常处理机制

2.ARM异常源

概念    

ARM异常源(触发中断的方式) 

3.ARM异常模式

4.ARM异常响应

5.异常向量表

 6.异常返回

 7.异常优先级


一、ARM体系架构

1、ARM公司概述

ARM的含义    

ARM(Advanced RISC Machines)有三种含义 :一个公司的名称、一类处理器的通称、一种技术

ARM公司    

> 成立于1990年11月,前身为Acorn计算机公司    

> 主要设计ARM系列RISC处理器内核    

> 授权ARM内核给生产和销售半导体的合作伙伴,ARM公司并不生产芯片    

> 提供基于ARM架构的开发设计技术软件工具、评估板、调试工具、应用软件、 总线架构、外围设备单元等

2.ARM产品系列

早先经典处理器    

包括ARM7、ARM9、ARM11家族

 Cortex-A系列    

针对开放式操作系统的高性能处理器     应用于智能手机、数字电视、智能本等高端运用  

Cortex-R系列    

针对实时系统、满足实时性的控制需求     应于汽车制动系统、动力系统等

 Cortex-M系列    

为单片机驱动的系统提供了低成本优化方案     应用于传统的微控制器市场、智能传感器、汽车周边等 

RISC精简指令集,代表:ARM

CISC:复杂指令集,典型代表:Intel

SOC(System on Chip) 即片上系统,将一个系统中所需要的全部部件集成在一个芯片中在体积、功耗、价格上有很大优势。例如:单片机

3.指令、指令集

指令    

能够指示处理器执行某种运算的命令称为指令(如加、减、乘 ...)    

指令在内存中以机器码(二进制)的方式存在    

每一条指令都对应一条汇编    

程序是指令的有序集合

 指令集    

处理器能识别的指令的集合称为指令集    

不同架构的处理器指令集不同    

指令集是处理器对开发者提供的接口

ARM指令集

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

 ARM指令集    

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

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

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

Thumb指令集  (属于ARM指令集)

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

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

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

4.编译原理

单片机常用的烧录二进制格式hex文件

   机器码(二进制0 1)是处理器能直接识别的语言,不同的机器码代表不同的运算指令,处理器能够识别哪些机器码是由处理器的硬件设计所决定的,不同的处理器机器码不同,所以机器码不可移植

 汇编语言是机器码的符号化,即汇编就是用一个符号来代替一条机器码,所以不同的处理器汇编也不一样,即汇编语言也不可移植  

  1. -S: 编译,生成汇编代码,生成的文件为test.S

    gcc -S test.s

  2. -c: 汇编:生成机器码,生成的文件未test.o

    gcc -c test.c

C语言在编译时我们可以使用不同的编译器(gcc)==>(翻译官)将C源码编译成不同架构处理器的汇编,所以C语言可以移植

5.ARM数据类型

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

Byte               8bits       字节

Halfword        16bits     半字

Word              32bits     全字

数据存储    

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

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

注:即数据本身是多少位在内存存储时就应该多少位对齐

字节序

大端对齐    

低地址存放高位,高地址存放低位    

a = 0x12345678;  

小端对齐    

低地址存放低位,高地址存放高位    

a = 0x12345678; 注:ARM一般使用小端对齐

6.ARM工作模式

 不同模式拥有不同权限  

不同模式执行不同代码  

不同模式完成不同的功能

1.ARM工作模式分类

按照权限    

User为非特权模式(权限较低),其余模式均为特权模式(权限较高)  

按照状态    

FIQ、IRQ、SVC、Abort、Undef属于异常模式,即当处理器遇到异常后 会进入对应的模式

7.寄存器

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

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

分类     包括通用寄存器、专用寄存器、控制寄存器

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

1.专用寄存器

R15(PC,Program Counter)    

程序计数器,用于存储当前取址指令的地址  

R14(LR,Link Register)    

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

> 执行跳转指令(BL/BLX)时,LR会自动保存跳转指令下一条指令的地址      

程序需要返回时将LR的值复制到PC即可实现    

> 产生异常时,对应异常模式下的LR会自动保存被异常打断的指令的下      

一条指令的地址,异常处理结束后将LR的值复制到PC可实现程序返回  

R13(SP,Stack Pointer)    

栈指针,用于存储当前模式下的栈顶地址

2.CPSR寄存器

CPSR(Current Program Status Register),当前程序状态寄存器

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

模式位:切换ARM工作模式;状态位:一般为ARM状态

  • 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

二、ARM异常处理

1.异常

    概念    

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

 异常处理机制

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

2.ARM异常源

概念    

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

ARM异常源(触发中断的方式) 

  FIQ            快速中断请求引脚有效          

  IRQ            外部中断请求引脚有效    

  Reset            复位电平有效    

  Software Interrupt    执行swi指令 (软中断)   

  Data Abort            数据终止    

  Prefetch Abort        指令预取终止    

  Undefined Instruction    遇到不能处理的指令

3.ARM异常模式

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

 

4.ARM异常响应

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

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

2.修改CPSR的值(状态寄存器)   

     2.1.修改中断禁止位禁止相应的中断     --没有NVIC,不支持中断嵌套

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

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

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

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

5.异常向量表

异常向量表    

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

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

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

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

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

 6.异常返回

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

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

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

 注:整个过程CPSR保存的永远是当前程序运行状态,SPSR只是异常时对原来的CPSR进行备份

 7.异常优先级

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

Reset > Data Abort  > FIQ > IRQ >Prefetch Abort > Software Interrupt > Undefined instruction

FIQ的响应速度比IRQ快    

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

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

3. FIQ的优先级高于IRQ     

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

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

 

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

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

相关文章

VTK安装和运行

创建日期: 2019-04-02 09:19:00 开始 学习资源 官方网站&#xff1a;https://vtk.org/ GitHub&#xff1a;https://github.com/Kitware/VTK 官方教程&#xff1a;https://vtk.org/Wiki/VTK/Tutorials 官方文档&#xff1a;https://vtk.org/documentation/ 用户手册&#…

RocketMQ 学习教程——(一)安装 RocketMQ

文章目录 RocketMQ 安装下载安装上传服务器配置环境变量修改 runserver.sh修改 runbroker.sh修改 broker.conf启动 安装 RocketMQ 控制台安装Linux 防火墙命令 Docker 安装 RocketMQ拉取镜像启动 NameServer 服务启动 Broker 服务启动控制台 RocketMQ 官网&#xff1a; http://…

​【编写UI自动化测试集】Appium+Python+Unittest+HTMLRunner​

简介 获取AppPackage和AppActivity 定位UI控件的工具 脚本结构 PageObject分层管理 HTMLTestRunner生成测试报告 启动appium server服务 以python文件模式执行脚本生成测试报告 下载与安装 下载需要自动化测试的App并安装到手机 获取AppPackage和AppActivity 方法一 有源码的…

算法11.从暴力递归到动态规划4

算法|11.从暴力递归到动态规划4 1.最长公共子序列 题意&#xff1a;给定两个字符串str1和str2&#xff0c;返回这两个字符串的最长公共子序列长度 比如 &#xff1a; str1 “a12b3c456d”,str2 “1ef23ghi4j56k” 最长公共子序列是“123456”&#xff0c;所以返回长度6 解…

【PowerShell】PowerShell 7.1 之后版本的安装

当前以下操作系统支持PowerShell 7.1 版本的安装,非Windows 系统支持的版本和要求有一定的限制。 Windows 8.1/10 (including ARM64)Windows Server 2012 R2, 2016, 2019, and Semi-Annual Channel (SAC)Ubuntu 16.04/18.04/20.04 (including ARM64)Ubuntu 19.10 (via Snap pa…

图的邻接矩阵表示

设图有n个顶点&#xff0c;则邻接矩阵是一个n*n的方阵&#xff1b;若2个顶点之间有边&#xff0c;则方阵对应位置的值为1&#xff0c;否则为0&#xff1b; 看几个例子&#xff1b; 此图的邻接矩阵是 0 1 1 1 1 0 1 0 1 1 0 1 1 0…

学习 xss+csrf 组合拳

目录 1.xss基础铺垫 1.1反射型xss 1.2存储型xss 1.3基于DOM的xss 1.4xss漏洞的危害 1.5xss漏洞的黑盒测试 1.6xss漏洞的白盒测试 2.csrf基础铺垫 2.1csrf攻击原理 2.2csrf攻击防护 3.应用案例 3.1存储型xsscsrf组合拳 3.2csrfselfxss组合拳 1.xss基础铺垫 跨站脚…

线程和进程

进程和线程的区别(超详细) 与进程不同的是同类的多个线程共享进程的堆和方法区资源&#xff0c;但每个线程有自己的程序计数器、虚拟机栈和本地方法栈&#xff0c;所以系统在产生一个线程&#xff0c;或是在各个线程之间作切换工作时&#xff0c;负担要比进程小得多&#xff0…

【架构】常见技术点--服务治理

导读&#xff1a;收集常见架构技术点&#xff0c;作为项目经理了解这些知识点以及解决具体场景是很有必要的。技术要服务业务&#xff0c;技术跟业务具体结合才能发挥技术的价值。 目录 1. 微服务 2. 服务发现 3. 流量削峰 4. 版本兼容 5. 过载保护 6. 服务熔断 7. 服务…

微服务之流量控制

Informal Essay By English I have been thinking about a question recently, what is the end of coding? 参考书籍&#xff1a; “凤凰架构” 流量控制 任何一个系统的运算、存储、网络资源都不是无限的&#xff0c;当系统资源不足以支撑外部超过预期的突发流量时&…

数字信号处理8:利用Python进行数字信号处理基础

我前两天买了本MATLAB信号处理&#xff0c;但是很无语&#xff0c;感觉自己对MATLAB的语法很陌生&#xff0c;看了半天也觉得自己写不出来&#xff0c;所以就对着MATLAB自己去写用Python进行的数字信号处理基础&#xff0c;我写了两天左右&#xff0c;基本上把matlab书上的代码…

【数据结构】轻松掌握二叉树的基本操作及查找技巧

二叉树的基本操作 ​ 在学习二叉树的基本操作前&#xff0c;需先要创建一棵二叉树&#xff0c;然后才能学习其相关的基本操作。由于现在大家对二 叉树结构掌握还不够深入&#xff0c;为了降低学习成本&#xff0c;此处手动快速创建一棵简单的二叉树&#xff0c;快速进入二叉树操…

【自然语言处理】不同策略的主题建模方法比较

不同策略的主题建模方法比较 本文将介绍利用 LSA、pLSA、LDA、NMF、BERTopic、Top2Vec 这六种策略进行主题建模之间的比较。 1.简介 在自然语言处理&#xff08;NLP&#xff09;中&#xff0c;主题建模一词包含了一系列的统计和深度学习技术&#xff0c;用于寻找文档集中的隐…

【刷题之路】LeetCode 2073. 买票需要的时间

【刷题之路】LeetCode 2073. 买票需要的时间 一、题目描述二、解题1、方法1——记录每个人需要的时间1.1、思路分析1.2、代码实现 2、方法2——队列记录下标2.1、思路分析2.2、先将队列实现一下2.3、代码实现 一、题目描述 原题连接&#xff1a; 2073. 买票需要的时间 题目描述…

Linux---用户组命令(groupadd、groupdel、groupmod、newgrp、getent)

1. groupadd命令 [rootlocalhost ~]# groupadd [选项] 组名 [rootlocalhost ~]# groupadd group1 --向系统中增加了一个新组group1&#xff0c;新组的组标识号是在当前已有的最大组标识号的基础上加1。 [rootlocalhost ~]# groupadd -g 101 group2 --向系统中增加了一个新组gr…

MySQL5.7递归查询与CTE递归查询

文章目录 一、8.0版本的递归1、CTE递归2、举例3、递归CTE的限制 二、5.7版本的递归1、find_in_set 函数2、concat函数3、自定义函数实现递归查询4、向上递归5、可能遇到的问题 一、8.0版本的递归 1、CTE递归 先看8.0版本的递归查询CET。语法规则&#xff1a; WITH RECURSIVE…

深入浅出解析Stable Diffusion完整核心基础知识 | 【算法兵器谱】

Rocky Ding 公众号&#xff1a;WeThinkIn 写在前面 【算法兵器谱】栏目专注分享AI行业中的前沿/经典/必备的模型&论文&#xff0c;并对具备划时代意义的模型&论文进行全方位系统的解析&#xff0c;比如Rocky之前出品的爆款文章Make YOLO Great Again系列。也欢迎大家提…

笔试强训错题总结(一)

笔试强训错题总结 文章目录 笔试强训错题总结选择题编程题连续最大和不要二最近公共祖先最大连续的bit数幸运的袋子手套 选择题 以下程序的运行结果是&#xff08;&#xff09; #include <stdio.h> int main(void) {printf("%s , %5.3s\n", "computer&q…

<Linux开发>驱动开发 -之-基于pinctrl/gpio子系统的beep驱动

&#xff1c;Linux开发&#xff1e;驱动开发 -之-基于pinctrl/gpio子系统的beep驱动 交叉编译环境搭建&#xff1a; &#xff1c;Linux开发&#xff1e; linux开发工具-之-交叉编译环境搭建 uboot移植可参考以下&#xff1a; &#xff1c;Linux开发&#xff1e; -之-系统移植…

如何在华为OD机试中获得满分?Java实现【人民币转换】一文详解!

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: Java华为OD机试真题&#xff08;2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…