一文深入搞懂ARM处理器架构

1、嵌入式处理器基础

典型的微处理器由控制单元、程序计数器(PC)、指令寄存器(IR)、数据通道、存储器等组成 。

指令执行过程一般分为:
 

取指:
从存储器中获得下一条执行的指令读入指令寄存器;
PC: 程序计数器, 总是指向下一条将要执行的指令;
IR: 指令寄存器,用于保持已取得指令;如图:

译码:
解释指令,决定指令的执行意义;如图:
 

执行:
从存储器向数据通道寄存器移动数据;
通过算术逻辑单元ALU进行数据操作;如图:
 

存储:
从寄存器向存储器写数据。如图:

在一些微处理器上,如ARM系列处理器、DSP等,指令实现流水线作业,指令过程按流水线的数目来进行划分。如5级流水线的处理器将指令分5个阶段执行。

(1)按存储结构分:冯·诺依曼体系结构和哈佛体系结构

冯·诺伊曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。

处理器,经由同一个总线传输来访问程序和数据存储器,程序指令和数据的宽度相同。如X86系列、ARM7等,如图:

哈佛结构是一种将程序指令存储和数据存储分开的存储器结构,目的是为了减轻程序运行时的访存瓶颈。哈佛结构的微处理器通常具有较高的执行效率。

Microchip公司的PIC系列芯片,摩托罗拉公司的MC68系列、Zilog公司的Z8系列、ATMEL公司的AVR系列和ARM公司的ARM9、ARM10和ARM11
等。如图:



按指令类型可分为:复杂指令集(CISC)处理器和精简指令集(RISC)处理器 。
 

CISC:复杂指令集(Complex Instru

ction Set Computer);

具有大量的指令和寻址方式,那么就需要更多的解释器。

8/2原则:80%的程序只使用20%的指令;

大多数程序只使用少量的指令就能够运行。

CISC具有如下显著特点:

(1) 指令格式不固定,指令长度不一致,操作数可多可少;

(2) 寻址方式复杂多样,以利于程序的编写;

(3) 采用微程序结构,执行每条指令均需完成一个微指令序列;

(4) 每条指令需要若干个机器周期才能完成,指令越复杂,花费的机器周期越多。

RISC:精简指令集(Reduced Instruction Set Computer):指令数目少,在通道中只包含最有用的指令;执行时间短,确保数据通道快速执行每一条指令;使CPU硬件结构设计变得更为简单;每条指令都采用标准字长。
 

   资料直通车:Linux内核源码技术学习路线+视频教程内核源码

学习直通车:Linuxc/c++高级开发【直播公开课】

零声白金VIP体验卡:零声白金VIP体验卡(含基础架构/高性能存储/golang/QT/音视频/Linux内核)

2、ARM处理器体系架构

ARM即Advanced RISC Machines的缩写。

1985年4月26日,第一个ARM原型在英国剑桥的Acorn计算机有限公司诞生。


20世纪80年代后期,ARM很快开发成Acorn的台式机产品,形成英国的计算机教育基础。

1990年成立了Advanced RISC Machines Limited。

20世纪90年代,ARM32位嵌人式RISC(Reduced Instruction Set Computer)处理器扩展到世界范围,占据了低功耗、低成本和高性能的嵌入式系统应用领域的领先地位。

目前己经占有75%以上的32位嵌入式产品市场。

32位RISC处理器受到青睐,领先的是ARM嵌入式微处理器系列。

ARM公司虽然只成立20多年,但在1999年因移动电话火爆市场,其32位RISC处理器占市场份额超过了50%,2001年初,ARM公司的32位RISC处理器市场占有率超过了75%。ARM公司是知识产权供应商,是设计公司。由合作伙伴公司来生产各具特色的芯片。

ARM处理器特点:

(1)ARM指令是32位定长的(除AArch64架构部分增加指令为64位外)
(2)寄存器数量丰富(37个寄存器)
(3)普通的Load/Store指令
(4)多寄存器的Load/Store指令
(5)指令的条件执行
(6)单时钟周期中的单条指令完成数据移位操作和ALU操作
(7)通过变种和协处理器来扩展ARM处理器的功能
(8)扩展了16位的Thumb指令来提高代码密度

ARM的命名规则, 大致分成两类类:


基于ARM Architecture版本的“处理器系列”命名规则;


基于ARM Architecture版本的“处理器型号”命名规则。
 

ARMv6 架构,引进了包括单指令多数据(SIMD)运算在内的一系列新功能。

ARMv6-M 架构,为低成本、高性能设备而设计,向以前由8位设备占主导地位的市场提供32位功能强大的解决方案。如Cortex™-M0和Cortex-M1。

ARMv7架构,所有ARMv7架构处理器都实现了Thumb-2 技术(一个经过优化的16/32位混合指令集),此架构分为3类处理器:Cortex-A -应用处理器、Cortex-R - 实时处理器、Cortex-M - 微控制器。

ARMv8架构,ARMv8-A将64位体系结构支持引入ARM体系结构中,其中包括:64位通用寄存器、SP(堆栈指针)和 PC(程序计数器),64位数据处理和扩展的虚拟寻址,兼容32位处理。

ARMv9架构,最重大的升级在于AI和安全,在兼容ARMv8的基础上,提升了安全性,增加了矢量计算、机器学习和数据信号处理等多方面能力,性能表现也将得到极大幅度的提升。

1)ARM数据类型

(1)双字节(Double-Word):64位

(2)字(Word):在ARM体系结构中,字的长度为32位。

(3)半字(Half-Word):在ARM体系结构中,半字的长度为16位。

(4)字节(Byte):在ARM体系结构中,字节的长度为8位。

2)ARM处理器存储格式

作为32位的微处理器,ARM体系结构所支持的最大寻址空间为4GB。

ARM体系结构可以用两种方法存储字数据,分别为大端模式和小端模式。

大端模式(高地高低):字的高字节存储在低地址字节单元中,字的低字节存储在高地址字节单元中。
 

3)ARM处理器工作状态

从编程的角度来看,ARM微处理器的工作状态一般ARM和Thumb有两种,并可在两种状态之间切换。

(1)ARM状态:此时处理器执行32位的字对齐ARM指令,绝大部分工作在此状态。
 

(2)Thumb状态:此时处理器执行16位的半字对齐的Thumb指令。

THUMB指令的特点:


THUMB代码所需空间为ARM代码的70%;
THUMB代码所使用的指令数比ARM代码多40%;
用32位存储器,ARM代码比THUMB代码快40%;
用16位存储器,THUMB代码比ARM代码快45%;
使用THUMB代码,外部存储器功耗比ARM代码少30%

4)ARM处理器工作模式
 

5)ARM Cortex-A处理器工作模式

6) Cortex-A寄存器组

34个通用寄存器,包括各种模式下的R0-R14和共用的R15程序计数器(PC),这些寄存器都是32位的。8个状态寄存器,Hyp模式独有一个ELR_Hyp寄存器。


 

7)程序状态寄存器CPSR和SPSR

和其他处理器一样,ARM有程序状态存储器来配置处理器工作模式和显示工作状态。ARM处理器有两个程序状态寄存器CPSR (Current Program Status Register,当前程序状态寄存器)和SPSR (Saved Program Status Register,备份的程序状态寄存器)。

CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位以及其他一些相关的控制和状态位。

每一种运行模式下都有一个专用的物理状态寄存器,称为SPSR为状态寄存器。
 

(1)N(Negative):当用两个补码表示的带符号数进行运算时,N=1表示结果为负,N=0表示结果为正数或零


(2)Z(Zero):Z=1表示运算结果为0,Z=0表示运算结果非零


(3)C(Carry):有4种方法可以设置C的值:

1)加法指令(包括比较指令CMP)


2)当运算产生进位时(无符号数溢出),C=1,否则C=0


3)减法运算(包括比较指令CMP)


4)当运算产生了借位(无符号数溢出),C=0,否则C=1

对于包含移位操作的非加/减运算指令,C为移出值的最后一位。对于其他的非加/减运算指令,C的值通常不变。

(4)V(Overflow):有2种方法设置V的值:


1)对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出。


2)对于其他的非加减法运算指令,V的值通常不变。

(5)I(Interrupt Request):I=1表示禁止响应irq,I=0表示允许响应

(6)F(Fast Interrupt Request):F=1表示禁止响应fiq,F=0表示允许响应


(7)T(Thumb):T=0表示当前状态位ARM状态,T=1表示为Thumb状态


(8)M4-M0:表示当前处理器的工作模式

8)工作模式的切换条件

(1)执行软中断(SWI)或复位命令(Reset)指令。如果在用户模式下执行SWI指令,CPU就进入管理(Supervisor)模式。


(2)有外部中断发生。如果发生了外部中断,CPU就会进入IRQ或FIQ模式。


(3)CPU执行过程中产生异常。最典型的异常是由于MMU保护所引起的内存访问异常,此时CPU会切换到Abort模式。如果是无效指令,则会进入Undefined模式。


(4)有一种模式是CPU无法自动进入的,这种模式就是System模式,要进入System模式必须由程序员编写指令来实现。要进入System模式只需改变CPSR的模式位为System模式对应的模式位即可。


(5)在任何特权模式下,都可以通过修改CPSR的MODE域来进入其他模式。不过需要注意的是由于修改的CPSR是该模式下的影子CPSR,即SPSR,因此并不是实际的CPSR,所以一般的做法是修改影子CPSR,然后执行一个MOVS指令来恢复执行某个断点并切换到新模式。



3、ARM处理器内存管理

1)什么是内存映射

内存映射指的是在ARM存储系统中,使用内存管理单元(MMU)实现虚拟地址到实际物理地址的映射,如图所示。

2)为什么要内存映射

A32架构的ARM的地址总线为32位,故CPU可寻址范围为0x00000000~0xffffffff寻址空间为4GB,所有的内部和外部存储或者外设单元都需要通过对应的地址来操作,不同芯片外设的种类数量寻址空间都不一样,为了能让内核更方便的管理不同的芯片设计,ARM内核会先给出预定义的存储映射。

芯片设计公司需要根据内核提供的预定义的存储器映射来定义芯片内部外设和外部的保留接口,这样做的好处是极大地减少了同一内核不同芯片间地址转化的麻烦(CPU操作统一的虚拟地址,实际物理地址交由MMU管理)。


 

3)位带操作

(1)什么是位带操作


举个简单的例子,在使用51单片机操作P1.0为低电平时我们知道这背后实际上就是往某个寄存器某个比特位中写1或0的过程,但在CPU操作的过程中每一个地址所对应的都是一个8位字节,怎么实现对其中某一位的直接操作,这就需要位带操作的帮助。

(2)哪些地址可以进行位带操作


上图中有两个区中实现了位带。其中一个是 SRAM 区的最低 1MB 范围(Bit band region),第二个则是片内外设区的最低 1MB 范围。

4)寄存器的地址计算

在ARM中所有的外设地址基本都是挂载在AHB或者APBx总线上,因此我们往往采用基地址+偏移地址+结构体的方式,来快速明了计算某一外设具体寄存器的地址,如图所示。
 

5)集成外设寄存器访问方法

原文作者:面包板社区

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PTA 编程题(C语言)-- 连续因子

题目标题: 连续因子 题目作者 陈越 浙江大学 一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3567,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数&#xff0c…

JavaEE的渊源

JavaEE的渊源 1. JavaEE的起源2. JavaEE与Spring的诞生3. JavaEE发展历程(2003-2007)4. JavaEE发展历程(2009-至今)5. Java的Spec数目与网络结构 1. JavaEE的起源 我们首先来讲一下JavaEE的起源 ,为什么要来讲起源 ? …

良品铺子、三只松鼠、来伊份双11内卷!谁是“新王”?

今年双11,三只松鼠(300783.SZ),良品铺子(603719.SH)和来伊份(603777.SH)的休闲零食产品在各大电商平台火热营销;营销热业绩冷,其三季报均不理想。 「不二研究」据其三季报发现:今年前三季度,良品铺子、三只…

如何给WSL2缩减硬盘(即减小虚拟大小)?

如何给WSL2缩减硬盘(即减小虚拟大小)? 1.软件环境⚙️🔍2.问题描述🔍🐡3.解决方法🐡🤔4.结果预览🤔 1.软件环境⚙️ Windows10 教育版64位 WSL 2 Ubuntu 20.04 &#x1f…

微信小程序之自定义组件开发

1、前言 从小程序基础库版本 1.6.3 开始,小程序支持简洁的组件化编程。所有自定义组件相关特性都需要基础库版本 1.6.3 或更高。开发者可以将页面内的功能模块抽象成自定义组件,以便在不同的页面中重复使用;也可以将复杂的页面拆分成多个低耦…

泛微OA_lang2sql 任意文件上传漏洞复现

简介 泛微OA E-mobile系统 lang2sql接口存在任意文件上传漏洞,由于后端源码中没有对文件没有校验,导致任意文件上传。攻击者可利用该参数构造恶意数据包进行上传漏洞攻击。 漏洞复现 FOFA语法: title"移动管理平台-企业管理" 页…

【Mybatis】3 的操作类型对象

前言知识汇总 上篇文章中我们已经详细介绍了Mybatis的存储类对象。我们上篇提到了: Mapper.xml当中的SQL标签都被解析成了一个一个的MappedStatement对象。那么我们当中的SQL是基于什么形式进行封装的呢? 我们要知道,Java当中一切皆对象。M…

人人都会的 Blazor —— 1.3 项目结构

项目结构 使用 Visual Studio 2022 创建 Blazor 项目。 在搜索框中输入【blazor】关键字,将列出以下已经存在的项目模板: Blazor Server App:基于 Blazor Server 托管模型的项目,并建立一些示例代码和组件;Blazor WebAssembly App:基于 Blazor WebAssembly 托管模型的项…

优维低代码实践:打包发布

导语 优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。…

uniapp使用vue3和ts开发小程序自定义tab栏,实现自定义凸出tabbar效果

要实现自定义的tabbar效果,可以使用自定义tab覆盖主tab来实现,当程序启动或者从后台显示在前台时隐藏自带的tab来实现。自定义一个tab组件,然后在里面实现自定义的逻辑。 组件中所使用的组件api可以看:Tabbar 底部导航栏 | uView…

【今天放个大招,带你手把手搭建 Jenkins 的分布式构建】

UI 自动化测试代码写完了以后,会放到 Jenkins 这样的持续集成工具上去构建。 如果 Jenkins 平台是搭建在服务器上,会面临 2 个问题: 第一个问题是 UI 自动化测试需要渲染界面,需要消耗大量的 CPU 和内存资源,如果服务器…

海康Visionmaster-全局脚本:通过全局脚本获取通讯输 入的参数并赋值给全局变量

全局脚本根据外部通讯输入的数值赋值给全局变量,实现输入与全局变量之间的数值绑定。(一般应用于定位、标定等需要外界物理值的场景)。 第一步,在 vm 通讯管理中设置好通讯设备,连接 第二步,根据通讯设备、接收的信息…

如何对非线性【SVM】进行三维可视化

首先导入相应的模块, from sklearn.datasets import make_blobs from sklearn.svm import SVC import matplotlib.pyplot as plt import numpy as np 我们使用make_circles()函数创建散点图,并将散点图中的点的横纵坐标赋值给x,y,其中x是特…

Git中的 fork, clone,branch

一、是什么 fork fork,英语翻译过来就是叉子,动词形式则是分叉,如下图,从左到右,一条直线变成多条直线 转到git仓库中,fork则可以代表分叉、克隆 出一个(仓库的)新拷贝 包含了原来…

奔驰E Coupe 升级鼠标按键 操作简单 完美结合

人机交互系统正是汽车智能化发展的产物,它实现了人与车之间的互联。不知道大家有没有发现,在很多奔驰车的中央扶手箱前,有一块类似于“鼠标”的操作区,它并不是我们常见的换挡杆,而是奔驰研发的独立影音控制系统COMAND…

(11_06)函数计算 FC 3.0 发布,全面降价,最高幅度达93%,阶梯计费越用越便宜

作为国内最早布局 Serverless 的云厂商之一,阿里云在 2017 年推出函数计算 FC,开发者只需编写代码并上传,函数计算就会自动准备好相应的计算资源,大幅简化开发运维过程。阿里云函数计算持续在 Serverless GPU 方面投入研发&#x…

数据结构与算法(Java版) | 排序算法的介绍与分类

各位朋友,现在我们即将要进入数据结构与算法(Java版)这一系列教程中的排序算法这一章节内容的学习中了,所以还请大家系好安全带,跟随我准备出发吧! 相信诸位应该都知道排序算法有很多种吧!就算没…

iPortal如何灵活设置用户名及密码的安全规则

作者&#xff1a;yx 目录 前言 一、配置文件介绍 1、<passwordRules>节点 注意事项&#xff1a; 2、<usernameRules>节点 二、应用实例 1、配置文件设置 2、验证扩展结果 三、结果展示 前言 SuperMap iPortal提供了扩展账户信息合规度校验规则的能力&#…

太坑了,降低 代码可读性的 12 个技巧

工作六七年以来&#xff0c;接手过无数个烂摊子&#xff0c;屎山雕花、开关编程已经成为常态。 下面细数一下 降低代码可读性&#xff0c;增加维护难度的 12 个编码“技巧”。 假设一个叫”二狗“ 的程序员&#xff0c;喜欢做以下事情。 1. 二狗积极拆分微服务&#xff0c;一个…

二.831(KMP)字符串详解

ne[3]枚举2次 ne[4],枚举3次 ne[5],枚举4次]b在后面了,就一个b就不可能在前面了]b舍弃 ne[6],枚举i-1次]一眼看最长相等前后缀,就是aab,aab ne[7],aaba,aaba ne[8],枚举i-1次]aabaa,aabaa 同理 怎么快速看呢!我想把b给夹起来]把中间夹的数越多就多 其实 加的有规律,最…