ARMv7-R Cortex-R 编程向导手册学习

/* TODO 写在前面:
 * 纵览整本规范,ARMv7-R 系列处理器可以看作简化版的 ARMv7-A 系列处理器。
 * 换句话说,ARMv7-A 是配置更灵活与复杂的 ARMv7-R 系列处理器。
 * 
 * R 系列处理器为实时功能提供硬件上的支持。
 */

第一章 介绍

Cortex-R 系列处理器对于临界代码(时间要求很严格的代码)的执行具有相当的优势,比如 Cortex-R 存在 TCM 内存,可以让 CPU 立即访问内存,类似于 cache, 但与 cache 不同的是,TCM内存对应真实的内存地址映射
Cortex-R5 与 Cortex-R7 存在特定的端口来访问时间临界的外设,这些专用的端口意味着访问这些外设时不会与低优先级的内存访问竞争(访问这些外设的寄存器地址时,不通过内存总线,而是专门的地址总线)。
Cortex-R CPU 也可以为硬实时应用提供低中断延迟的中断。

第二章 ARM 架构处理器

ARM 架构手册不会指定 cache 的大小以及单独指令的执行周期。

  • Cortex-A系列处理器是支持虚拟内存系统 MMU 的高性能处理器。
  • Cortex-R 系列处理器是用于要求时间确定且拥有低中断延迟的 RTOS,处理器使用 MPU 来保护内存区域,而不支持 MMU。
  • Cortex-M 系列处理器是低成本处理器,同样拥有低中断延迟,与 A/R 系列处理器不同, M系列处理器使用不同的异常处理模型,且只支持 Thumb 指令集。

第三章 处理器模式与寄存器

ARMv7-R 架构是模型架构(与 ARMv7-A类似, 但有一些不同),存在6个特权模式与一个user模式:

在这里插入图片描述


ARMv7-R 定义了两个特权等级:

  • PL0 : 非特权等级,对应 user 模式。
  • PL1: 特权等级,除 user 模式外的其他模式。
    模式与特权等级的对应关系如下:

    在这里插入图片描述


    当前处理器模式与执行状态可以通过 cpsr 寄存器查看,也可以通过写 cpsr 寄存器来改变当前处理器模式与状态,注意,只有特权代码可以访问cpsr。

3.1 寄存器

与ARMv7-A 类似,ARMv7-R 提供 16 个通用目的寄存器:R0-R15, 也提供了当前程序状态寄存器:CPSR,以及在特权模式下,提供一个备份程序状态寄存器:SPSR,用于保存之前执行模式下的 CPSR 的拷贝。

在这里插入图片描述


Banking: 不同模式下,同一个寄存器名对应不同的物理地址。
不同模式下,Banking 寄存器如下:

在这里插入图片描述


在所有模式下,访问 R0-R7 与 R15 都对应同一个物理地址。

3.1.1 程序状态寄存器 cpsr

CPSR用于存储:

  • 算数逻辑标志位
  • 当前处理器模式
  • 中断失能标志位
  • 当前处理器状态,ARM/Thumb 等
  • 数据端序,大端与小端
  • IT(if-then) 模块执行状态位
    CPSR 位定义如下:

    在这里插入图片描述


    CPSR 与 SPSR 通过 MSR/MRS 指令访问。

3.1.2 协处理器 cp15

cp15 是处理器内部集成的一个模块,用于系统功能控制。
cp15 包含16个寄存器组:c0 - c15。

协处理器寄存器组 功能描述
C0 MIDR, MPIDR CPU id 号
C1 SCTLR, ACTLR, CPACR 系统功能控制
C5/c6 DFSR/IFSR, DFAR/IFAR, MPU 错误状态与错误地址,以及 MPU 控制
C7 Cache 维护操作
C9 Cpu 性能监控
C13 线程 id 寄存器
C15 CBAR 存储 gic 基地址

所有的协处理器通过 MCR/MRC 指令访问。

3.1.3 系统控制寄存器 SCTLR

SCTLR 寄存器通过 cp15 访问,提供:

  • MPU 内存控制
  • 处理器功能控制,比如 I/D cache 使能
  • 对于 cpu 实现的功能提供 CPU 状态信息

SCTLR 寄存器位定义如下:

在这里插入图片描述

第四章 汇编语言介绍

汇编语言是底层的编程语言,与机器码一一对应,学习汇编语言可以让我们能够编写启动代码,能让我们更有效率的调试 C 代码。

(与 ARMv7-A 汇编类似,后续阅读规范)

第五章 统一的汇编语言指令

这一章会对常用的汇编指令做一个介绍,比如:

  • 数据处理操作指令,比如算术指令
  • 内存访问指令
  • 跳转指令
  • 其他指令,如:协处理器访问指令,异常生成指令,CPSR/SPSR 访问指令

(与 ARMv7-A 汇编类似,后续阅读规范)

第六章 浮点

ARMv7-R 支持vfpv3

第七章 cache 与 write buffer

Cache 是cpu 内部硬件控制的一块 ram, 对软件不可见。
Write buffer 同样也是一片 ram,让cpu 核不需要等待写操作完成。

7.1 cache 缺点

Cache 的缺点如下:

  • 程序执行时间是不确定的,因为可能伴随 cache 的分配与替换。
  • 存在 cache 中的数据与外部内存不一致的情况,这是cache 一致性的问题。
  • 在 cpu 复位后,cache 中的数据是不确定的,所以一般我们需要在启动代码中使无效 Dcache,保证此时cache 内容是干净的。

7.2 内存架构

ARMv7-A 通用内存架构如下:

在这里插入图片描述


一般 cpu 存在两级 cache:

  • L1 Cache 是每一个 cpu 核独有的,每一个核都有自己的L1 cache, 而 L1 cache 又分为 I-cache 与 D-cache。
  • L2 cache 是CPU 上所有核共享的。

外部内存是最低层的存储设备,如果 cache 中没有我们要访问的数据,那么才会通过总线访问内存。

7.3 cache 架构

7.3.1 cache 术语

在这里插入图片描述

cache 术语 描述
line cache 最小加载单元,加载一片连续的word
index 内存地址的一部分,用于确定当前的内存地址属于哪一个 cache line
way way 是 cache 的细分,每一个 way 都是相同的大小,且具有相同范围的 index
set 不同way 中,具有相同 index 的cache line 被称作属于同一个 set
tag 是内存地址的最高有效位,每一个 cache line 都会存储它对应的 tag

注:只要理解了上述的 cache 术语,手册后续的cache 章节,理解起来就轻松多了。包括cache 策略以及cache 维护操作。

第八章 TCM

TCM 内存可以为 cpu 提供低延迟的内存访问,而且没有 cache 的不确定性。
(没有 cache 的分配与替换,因为 TCM 可以映射到内存,然后通过内存地址访问)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340