Armv8-R AArch32 architecture概念学习
提示
- 该博客主要为个人学习,通过阅读官网手册整理而来(个人觉得阅读官网的英文文档非常有助于理解各个IP特性)。若有不对之处请参考参考文档,以官网文档为准。
- 阅读该文章,可以先查看AArch64 Exception Model学习,再来看该文章会非常简单
1. 执行状态
该体系结构只有AArch32执行状态。执行状态定义了处理器的执行环境,包括:
- 支持寄存器位宽
- 支持指令集
- 还有以下几方面
- 执行模型
- PMSA
- 编程模型
2. 异常等级
Armv8-R AArch32的异常等级为: EL0~EL2
EL0:Applications
EL1: 通常被描述为特权的操作系统内核和相关函数
EL2: Hypervisor
- EL0具有最低的软件执行特权,在EL0处的执行称为非特权执行。
- 从1到2表示增加了软件执行特权。
- EL2提供了对处理器虚拟化的支持。
只有在发生异常或从异常返回时,执行才能在异常级别之间切换: - 在发生异常时,异常级别会增加或保持不变。在发生异常时,异常级别无法降低。
- 当从异常返回时,异常级别会降低或保持不变。当从异常返回时,异常级别无法增加。
发生异常时执行更改或保留在的异常级别称为异常的目标异常级别,并且: - 每个异常类型都有一个目标异常级别:
- 隐含在异常的性质中
- 由系统寄存器中的配置位定义
- 异常目标不能是EL0
3. AArch32执行模式
当处于AArch32状态时,处理器可以以几种模式之一执行。每个模式都与一个异常级别相关联。有些模式有一些通用寄存器的私有、bank副本。异常情况会导致处理器切换到一个特定的模式。
下表显示了AArch32处理器模式,以及每个模式的异常级别

4. 支持v8内存类型
Armv8提供了互斥的内存类型。内存映射中的每个地址都有一个由MPU决定的内存类型。
内存类型:
- Normal:这通常用于大容量内存,包括读/写内存和只读内存。
- Device:这通常用于外设,它们可能是读敏感或写敏感的。Arm架构限制了对设备内存的排序、合并或推测。
Armv8架构将设备内存细分为几个子类型。这些属性涉及以下属性: - G:收集。将请求收集并合并为单个事务的能力。
- R:重新排序。重新排序事务的能力。
- E:早期承认。接受来自互连的事务的早期确认的能力。
下表描述了Armv8的内存类型。

5. 系统寄存器
系统寄存器提供控制和状态信息。例如,寄存器可能提供有关core已采取的abort exception的综合信息,或提供一个启用或禁用缓存的控制。
系统寄存器使用一种标准的命名格式,<register_name>.<bit_field_name>,来识别特定的寄存器以及寄存器内的控制位和状态位。位也可以用它们在形式<register__name>[x:y]或通用形式bits[x:y]中的数字位置来描述。
系统寄存器包括:
- ID registers.
- General system control registers.
- Debug registers.
- Generic Timer registers.
- Performance Monitor registers.
- GIC CPU interface registers.
6. 通用寄存器
Armv8-R AArch提供了对15个32位通用寄存器R0-R14的访问。
其中,有两个有专门的或受限制的用途:
- R13通常被标识为SP,即堆栈指针。
- R14通常被标识为LR,即链接寄存器。
当然,还有一个32位的程序计数器(PC),R15。
其中一些寄存器是bank上的。这些是使用相同的标识符访问的多个物理寄存器,执行模式决定了访问哪个寄存器。例如: - 在abort模式下,对SP的访问将访问物理寄存器SP_abt。
- 在user模式下,对SP的访问将访问物理寄存器SP_usr。
在Hypervisor模式下,还有一个附加的专用链接寄存器,ELR_hyp。
高级SIMD和浮点指令使用了另一组寄存器。这些寄存器可以作为32位单精度寄存器S0-S31访问,也可以作为64位双精度寄存器D0- D31访问,或128位四元寄存器Q0-Q15访问,但这些是相同数据的不同视图。数据可以在高级SIMD和浮点寄存器和整数寄存器之间传输。
7. 程序状态寄存器
程序状态寄存器包括当前程序状态寄存器(CPSR)、应用程序状态寄存器(APSR)和已保存的程序状态寄存器(SPSR)。
CPSR包括:
- 可以由某些指令设置并决定其他指令的行为的标志。
- 反映处理器的当前模式和其他状态的状态位。
- 控制位决定例如中断掩蔽和数据大小端。
CPSR中的许多位都限制了使用,并且只能进行修改: - 在特权模式。
- 作为异常或异常返回的副本。
呈现给运行在异常级别EL0上的应用程序的CPSR的视图称为APSR。
每个可以采用异常的模式都有自己的SPSR。每个SPSR用于在发生异常时保存CPSR的副本,从而允许在异常返回时恢复它。
8. 数据类型
AArch32体系结构支持以下整数数据类型:
- Byte (8 bits).
- Halfword (16 bits).
- Word (32 bits).
- Doubleword (64 bits).
该架构还支持半精度、单精度和双精度的浮点数据类型。
9. 内存模型
该架构定义了PMSAv8内存模型,以确定:
- 对指令和数据执行内存访问的排序规则和其他限制。
- 内存访问的权限和其他属性,以及它们是如何由MPU确定的。
Cortex-R52+支持PMSAv8,并且没有MMU或地址转换功能。即使MPU不执行任何实际的转换,该函数仍然被称为转换。这是因为物理地址总是与虚拟地址是相同的。虚拟地址和物理地址是指由指令生成的转换前和转换后在总线上可见的地址。虚拟地址和物理地址可以作为Cortex-R52+的一套地址来处理。
10. GIC架构
Cortex-R52+处理器支持GIC架构的三个组件:分发器(Distributor)、再分发器(Redistributor)和CPU接口(CPU interface)。
分发器包含支持SPIs的寄存器,除了优先级逻辑,它计算每个核心的最高优先级等待中断。再分发器包含支持PPIs和SGIs的寄存器。CPU接口跟踪当前正在运行的优先级和虚拟中断。它决定了核心是否被中断。
中断被配置为对边缘触发或电平敏感的。每个中断都具有可编程启用、优先级(0-31)、组(0或1)、路由(仅SPI)配置和当前状态。
当接收到中断信号时,它被pending。根据其配置,一个pending中断可能会中断一个core的执行。软件可以读取中断的ID,并且激活(active)它。软件还可以结束一个中断,从而使其失效(deactives)。
虚拟中断是由系统管理程序(hypervisor)软件写入CPU接口中的列表寄存器而创建的,通常是为了响应物理中断。虚拟中断的处理方式与物理中断类似,但只能在core处于EL0或EL1中时中断它。当一个虚拟中断被停用(deactive)时,可以对其进行配置,即当该虚拟中断被停用时,相应的物理停用消息也会发送给GIC分发器。
该章会单独写几篇文章说明,别担心
参考文献
Arm® Cortex®-R52+ Processor Technical Reference Manual
相关文章:
Armv8-R AArch32 architecture概念学习
提示 该博客主要为个人学习,通过阅读官网手册整理而来(个人觉得阅读官网的英文文档非常有助于理解各个IP特性)。若有不对之处请参考参考文档,以官网文档为准。阅读该文章,可以先查看AArch64 Exception Model学习&…...
linux手动安装 vscode-server
适用场景 很多时候,我们需要在本机(比如windows)通过remote ssh访问远程服务器(一般是ubuntu),但经常出现 vscode 一直连不上远程服务器的情况,看一下 log: 这个log表示远程服务器…...
【Maven】009-Maven 简单父子工程搭建
【Maven】009-Maven 简单父子工程搭建 文章目录 【Maven】009-Maven 简单父子工程搭建一、需求说明1、结构2、第三方库 二、工程搭建1、父工程第一步:创建父工程第二步:引入公共依赖 lombok 和管理 hutool 依赖版本 2、公共子模块第一步:创建…...
verilog编程题
verilog编程题 文章目录 verilog编程题序列检测电路(状态机实现)分频电路计数器译码器选择器加减器触发器寄存器 序列检测电路(状态机实现) module Detect_101(input clk,input rst_n,input data,o…...
What is `addArgumentResolvers` does in `WebMvcConfigurer` ?
addArgumentResolvers 在SpringMVC框架中,主要用于向Spring容器注册自定义的参数解析器。在处理HTTP请求时,SpringMVC会使用这些参数解析器将请求中的数据(如查询参数、路径变量、表单数据等)转换并注入到控制器方法的参数中。 使…...
[NSSCTF Round#16 Basic]RCE但是没有完全RCE
RCE但是没有完全RCE wp 题目代码: 第一关 <?php error_reporting(0); highlight_file(__file__); include(level2.php); if (isset($_GET[md5_1]) && isset($_GET[md5_2])) {if ((string)$_GET[md5_1] ! (string)$_GET[md5_2] && md5($_GET[m…...
LTD营销枢纽(乐通达)成为杭州市中小企业数字化转型遴选服务商
为推进国家中小企业数字化转型城市试点建设,赋能中小企业信息化、智能化、新型工业化能力水平提升,杭州市经信局公开招募了具备高质量服务能力的中小企业数字化转型服务商。经过公开征集、专家评审等多个环节,LTD营销枢纽凭借其在数字化转型领…...
详细分析Mybatis中的<foreach>标签
目录 前言1. 基本语法2. Demo3. 实际例子 前言 对于Java专栏:Java专栏 对于Mybatis的相关知识可看我之前的文章:Mybatis从入门到精通(全) 对于其余Java框架可看我之前的文章:java框架 零基础从入门到精通的学习路线 附…...
linux-挂载Samba共享
linux-挂载Samba共享 1、linux服务器启动Samba共享服务 2、客户端电脑安装cifs-utils dnf install cifs-utils # 或 yum install cifs-utils3、挂载共享目录 # 创建挂目录 mkdir /share # 使用mount命令挂在共享目录,-t协议类型 -o用户名密码 共享目录访问地址 挂…...
Java入门IDEA基础语法
1:Java入门 1.1 Java简介 Java是什么: Java是一门非常优秀的计算机语言 语言:人与人交流沟通的表达方式 计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言 Java之父:詹姆斯高斯林(James Gosli…...
【小白专用】C# 连接 MySQL 数据库
C# – Mysql 数据库连接 1. 配置环境 #前提:电脑已安装Mysql服务; Visual Studio 安装Mysql依赖库: 工具 -> NuGet 包管理器 -> 管理解决方案的 NuGet程序包 —> 搜索, 安装Mysql.Data (Oracle); (安装成功后&…...
Django登录注销视图
Django在身份验证框架中包含了一些你可以直接使用的表单和视图。在大多数情况下,可以使用默认的Django认证视图。 Django在django.contrib.auth.views提供了以下基于类的视图来处理身份验证: LoginView:处理登录表单并登录用户 LogoutView&a…...
云原生到底是什么意思
云原生到底是什么意思? 引言 随着云计算技术的迅速发展,云原生成为了一个备受关注的话题。云原生不仅仅是一种新的软件架构,更是一种变革性的开发方法论。本文将深入解析云原生的意义、特点以及为什么它在现代软件开发中变得如此重要。 云…...
【银行测试】银行项目,信用卡业务测试+常问面试(三)
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 银行测试-信用卡业…...
AI大模型学习笔记之二:什么是 AI 大模型的训练和推理?
在人工智能(AI)的领域中,我们经常听到训练(Training) 和 推理(Inference) 这两个词汇,它们是构建强大 AI 模型的关键步骤。我们通过类比人类的学习过程来理解这两个概念,可以更加自然而生动地理…...
【MATLAB源码-第113期】基于matlab的孔雀优化算法(POA)机器人栅格路径规划,输出做短路径图和适应度曲线。
操作环境: MATLAB 2022a 1、算法描述 POA(孔雀优化算法)是一种基于孔雀羽毛开屏行为启发的优化算法。这种算法模仿孔雀通过展开其色彩斑斓的尾羽来吸引雌性的自然行为。在算法中,每个孔雀代表一个潜在的解决方案,而…...
iphone 5s的充电时序原理图纸,iPAD充电讲解
上一篇写了iphone 5的时序。那是电池供电的开机时序。iphone 5s也是差不多的过程,不说了。现在看iphone5s手机充电时候的时序。iphone5s充电比iphone5充电简单了很多。 首先是usb接口接到手机上,usb线连接到J7接口上。J7接口不只是接usb,还能…...
react基础入门
1,了解react react并不是一个MVC框架,他只是一个很强大的javaScript库,主要作用是用来构建UI界面。 react的核心是封装一个个大大小小的组件(小到一个按钮,大到一个页面)来构建复杂的UI界面,每…...
spring boot学习第八篇:通过spring boot、jedis实现秒单
参考:Redis实现分布式锁的7种方案 - 知乎 1、 准备数据库表,如下SQL表示库存表,有主键ID和库存数量字段 CREATE TABLE t_stock (id bigint(20) NOT NULL AUTO_INCREMENT,quantity bigint(20) NOT NULL,PRIMARY KEY (id) ) ENGINEInnoDB DEF…...
NineAi 新版AI系统网站源码 ChatGPT
简介: Nine AI.ChatGPT是基于ChatGPT开发的一个人工智能技术驱动的自然语言处理工具,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论文等任务。 NineAi 新版A…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
