Armv8-R内存模型详解
目录
1.内存模型的必要性
2.Armv8-R内存模型分类
2.1 Normal memory
2.2 Device Memory
2.2.1 Gathering
2.2.2 Reordering
2.2.3 Early Write Acknowledgement
3.小结
大家好,今天是悲伤的肌肉。
在调研区域控制器芯片时,发现了S32Z、Stellar SR6P7等芯片均采用的是Cortex-R52\R52+内核,该内核架构为Armv8-R;
在阅读内核手册时对内存模型里出现很多之前没有接触过的概念感到困惑,例如Normal memory\Device Memory、Device_nGnRnE;因此简单总结下,以备不时之需。
1.内存模型的必要性
首先我认为比较关键的是搞明白内存模型存在的必要性。
以TC3xx为例,我们关注比较多的就是cacheable和non-cacheable的memory地址,涉及到外设模块操作就直接在地址映射表里找基地址,如下图:

从这个角度来看,内存模型其实就是定义了memory是如何被寻址,定义了memory自身的一些行为。例如,TC3xx定义了A和8的Segment为Code存放区,那我们设计ld的时候自然会以此为基础,同时由于是Code区,它的属性就为ReadOnly。整体设计思路如下图:

这些属性不止是告诉我们,同时还会告诉处理器应该如何处理不同地址的访问。把这个思路迁移到Armv8架构里,会发现万变不离其宗, 同样需要指定memory不同地址的属性,这样CPU才能单独执行访问。
2.Armv8-R内存模型分类
在Armv8-R里,内存模型被分成了两类:Normal memory和Device Memory。
2.1 Normal memory
Normal Memory就是我们通常意义上讲的RAM、ROM、Flash等等;
所谓Normal,就是对于该地址的访问不会造成副作用,例如重复读取Flash某个位置的数据,只会返回数据,并不会造成数据修改。
因此,为了提高运行性能,CPU可以针对normal memory进行一些优化操作,比如执行预测访问:在软件发起请求操作之前,CPU就已经预取了normal memory的Data、Code,以加快访问速度;再比如访问的再排序,以生成更高效率的总线访问。
Normal Memoy可以增加Cache的属性,以加快系统运行速率、减少功耗;但是Cache的属性(例如Write-back\Write-Through、Size)会对使用者造成一些误解,因此需要谨慎使用。
2.2 Device Memory
在Armv8里,Device Memory用来描述外设;这类型的memory与刚才聊到的Normal memory最大区别在于:对Device Memory的访问可能会产生副作用。
例如,我们读取一个FIFO通常会导致内部指针指向下一块数据,访问FIFO的次数就尤为重要,所以告诉CPU当前Device Memory的属性非常关键。
首先,Cacheable肯定是不可接受的,简单例子,我们访问寄存器肯定是直接访问了,不需要cache;
其次,数据预测访问理论上应该是不允许的,以上面的读取FIFO为例,软件肯定是希望获取到完整数据;
最后,Device Memory不应该进行取指运行,值得注意的是,如果memory是Device属性,它仅仅只是针对数据预测访问,只有把其设置Not executable才能预防指令预测访问。
接下来就是我一直比较困惑的Device子属性--GRE。

2.2.1 Gathering
在Armv8手册里详细描述了Gathering的用法:
- 对同一内存位置的相同类型的多个内存访问(读或写)将合并到单个transaction中;
- 同一类型的对个内存访问到不同内存位置,将在一个interconnect里合并成一个transaction;
震惊,完全不知道在说什么。后来多方询问,可以从汇编角度进行看,如下图:

在Gathering属性加持加,把r1的值存储到r4所指定地址,并在r4 = r4所指地址+4,这四个操作可以合并为一次传输给到目标memory,从而减少传输过程中的时间损耗;这种感觉就很像诊断里流控+连续帧的用法。
2.2.2 Reordering
Reordering可以重新对传输事务进行排序,这就和normal memory的reorder比较类似,目的是为了生成更高效率的访问传输。
2.2.3 Early Write Acknowledgement
当Device配置该属性后,就意味着Core向外设发起的写访问,可以有中间buffer进行响应,如下图所示:

当Device没有该属性时,只能由外设进行写确认的response。
我们看到的nGnRnE,其实就是not-Gathering、not-Reordering、not-Early。
因此,Device Memory的属性可有如下配置:
- Device_GRE:允许gathering, re-ordering, and early write acknowledgement;
- Device_nGnRnE:不允许gathering, re-ordering, and early write acknowledgement;
- Device_nGnRE:不允许gathering, re-ordering,允许early write acknowledgement
- ......
3.小结
经上面简单总结,我们了解到了在Armv8架构下内存模型分类:Normal和Device;针对Device的子属性包含了gathering, re-ordering和early write acknowledgement,以及对应限制。后续我们继续找一颗R52内核MCU来看看Normal memory和Device memory具体是如何分配的。
相关文章:
Armv8-R内存模型详解
目录 1.内存模型的必要性 2.Armv8-R内存模型分类 2.1 Normal memory 2.2 Device Memory 2.2.1 Gathering 2.2.2 Reordering 2.2.3 Early Write Acknowledgement 3.小结 大家好,今天是悲伤的肌肉。 在调研区域控制器芯片时,发现了S32Z、Stellar …...
Python面经
文章目录 Python基本概念1. Python是**解释型**语言还是**编译型**语言2. Python是**面向对象**语言还是面向过程语言3. Python基本数据类型4.append和 extend区别5.del、pop和remove区别6. sort和sorted区别介绍一下Python 中的字符串编码is 和 的区别*arg 和**kwarg作用浅拷…...
海外ASO:iOS与谷歌优化的相同点和区别
海外ASO是针对iOS的App Store和谷歌的Google Play这两个主要海外应用商店进行的优化过程,两个不同的平台需要采取不同的优化策略,以下是对iOS优化和谷歌优化的详细解析: 一、iOS优化(App Store) 1、关键词覆盖 选择关…...
【C++题解】1168. 歌唱比赛评分
问题:1168. 歌唱比赛评分 类型:数组找数 题目描述: 四(1) 班要举行一次歌唱比赛,以选拔更好的苗子参加校的歌唱比赛。评分办法如下:设 N 个评委,打 N 个分数( 0≤每个分…...
鸿蒙开发工程师面试-架构篇
1. 假如让你负责鸿蒙App架构设计,你会关注哪些方面? 分层架构设计: 将应用划分为产品定制层、基础特性层和公共能力层,以降低层间依赖性,提升代码可维护性。通过分层架构设计,进一步明确每层的职责和层间交…...
【Redis】持久化
对于Redis中间件来说,一般是作为内存型数据库或者缓存出现的。但是由于其数据是在内存中,因此当Redis所在的主机宕机之后,数据就会消失,再次重启之后,没有任何数据。这对于生产环境来说,是属于P0级别的灾难…...
港股指数实时行情API接口
港股 指数 实时 行情 API接口 # Restful API https://tsanghi.com/api/fin/index/HKG/realtime?token{token}&ticker{ticker}指定指数代码,获取该指数的实时行情(开、高、低、收、量)。 更新周期:实时。 请求方式:…...
Qt5开发实战_图形_QPen
Qpen是Qt框架中的一个类,用于定义绘制线条的属性,包括颜色、宽度、样式、端点样式和连接样式。 具体属性(设置颜色和设置宽度直接pass从样式开始): 设置样式: pen的样式主要有以下几种: 分别是:直线样式…...
linux进程周边知识——内核对硬件的管理——计算机世界的管理
前言:本节主要讲解内核也就是操作系统对于硬件的管理, 本节内容同样为进程的周边知识。 主要是关于软件方面, 和我的上一篇——冯诺依曼体系结构可以说是兄弟文章, 这篇文章主要是关于硬件方面。 两篇文章都是为学习进程做准备。但…...
同声传译语音合成接口,分段预合成实现丝滑的衔接效果
背景: 在使用微信官方语音合成插件的时候遇到一个问题,textToSpeech这个api的内容限制在官网的文档上明明是1000个字节,也就是说能保证333个中文字符应该是没有问题的,但是也不知道为什么我这里仅仅传了150个中文字符就报错了&…...
数据结构——单链表详解(超详细)(1)
前言: 小编在近日学习了单链表的知识,为了加强记忆,于是诞生了这一篇文章,单链表是数据结构比较重要的知识,读者朋友们一定要去好好的学习!这个可以说是比顺序表更好用的线性表,下面废话不多说&…...
在 Linux 上使用 lspci 命令查看 PCI 总线硬件设备信息
lspci 命令用于显示 Linux 系统上的设备和驱动程序 当在个人电脑或服务器上运行 Linux 时,有时需要识别该系统中的硬件。lspci 命令用于显示连接到 PCI 总线的所有设备,从而满足上述需求。该命令由 pciutils 包提供,可用于各种基于 Linux 和…...
python数据可视化(6)——绘制散点图
课程学习来源:b站up:【蚂蚁学python】 【课程链接:【【数据可视化】Python数据图表可视化入门到实战】】 【课程资料链接:【链接】】 Python绘制散点图查看BMI与保险费的关系 散点图: 用两组数据构成多个坐标点,考察…...
【人工智能】Transformers之Pipeline(二):自动语音识别(automatic-speech-recognition)
目录 一、引言 二、自动语音识别(automatic-speech-recognition) 2.1 概述 2.2 技术原理 2.2.1 whisper模型 2.2.2 Wav2vec 2.0模型 2.3 pipeline参数 2.3.1 pipeline对象实例化参数 2.3.2 pipeline对象使用参数…...
Mysql-错误处理: Found option without preceding group in config file
1、问题描述 安装MYSQL时,在cmd中“初始化”数据库时,输入命令: mysqld --initialize --consolecmd报错: D:\mysql-5.7.36-winx64\bin>mysql --initialize --console mysql: [ERROR] Found option without preceding group …...
[iOS]内存分区
[iOS]内存分区 文章目录 [iOS]内存分区五大分区栈区堆区全局区常量区代码区验证内存使用注意事项总结 函数栈堆栈溢出栈的作用 参考博客 在iOS中,内存主要分为栈区、堆区、全局区、常量区、代码区五大区域 还记得OC是C的超类 所以C的内存分区也是一样的 iOS系统中&a…...
sklearn基础教程:掌握机器学习入门的钥匙
sklearn基础教程:掌握机器学习入门的钥匙 在数据科学和机器学习的广阔领域中,scikit-learn(简称sklearn)无疑是最受欢迎且功能强大的库之一。它提供了简单而高效的数据挖掘和数据分析工具,让研究人员、数据科学家以及…...
【unity实战】使用unity制作一个红点系统
前言 注意,本文是本人的学习笔记记录,这里先记录基本的代码,后面用到了再回来进行实现和整理 素材 https://assetstore.unity.com/packages/2d/gui/icons/2d-simple-ui-pack-218050 框架: RedPointSystem.cs using System.…...
开发指南046-机构树控件
为了简化编程,平台封装了很多前端组件。机构树就是常用的组件之一。 基本用法: import QlmOrgTree from /qlmcomponents/tree/QlmOrgTree <QlmOrgTree></QlmOrgTree> 功能: 根据权限和控制参数显示机构树。机构树数据来源于核…...
SpringBatch文件读写ItemWriter,ItemReader使用详解
SpringBatch文件读写ItemWriter,ItemReader使用详解 1. ItemReaders 和 ItemWriters1.1. ItemReader1.2. ItemWriter1.3. ItemProcessor 2.FlatFileItemReader 和 FlatFileItemWriter2.1.平面文件2.1.1. FieldSet 2.2. FlatFileItemReader2.3. FlatFileItemWriter 3…...
避坑指南:在昇腾Atlas服务器部署FunASR说话人分离模型时,如何解决Torch_npu版本冲突和依赖问题
昇腾Atlas服务器部署FunASR说话人分离模型的实战避坑手册 当你在昇腾Atlas服务器上第一次尝试部署FunASR说话人分离模型时,可能会遇到各种意想不到的问题。从Torch_npu版本冲突到CANN兼容性问题,再到量化配置的坑,每一步都可能让你陷入调试的…...
给小米CyberGear电机找个‘家’:用3D打印限位器解决断电丢零位问题(附STL文件)
给小米CyberGear电机打造3D打印限位器:硬件方案解决断电丢零位难题 在机器人开发领域,小米CyberGear和灵足电机凭借其高性价比和出色性能,已成为众多创客和工程师的首选。然而,这类电机在实际应用中存在一个普遍痛点——断电后零…...
YOLOv11 OBB实战:手把手构建旋转目标检测数据集
1. 为什么需要旋转目标检测? 在传统的目标检测任务中,我们通常使用水平矩形框(HBB)来标注物体。这种标注方式简单直接,但对于某些特定场景下的物体检测效果并不理想。比如在遥感图像中,飞机、船只等物体往往…...
星光护航 家校同行 多方联合点亮4·2世界孤独症日公益之光
2026年4月2日第19个世界孤独症关注日来临之际,联合国官宣年度主题Autism and Humanity — Every Life Has Value(孤独症与人类 — 每一个生命都弥足珍贵),中国同步确定“提质全生涯服务供给,聚焦孤独症家庭支持与成年服…...
解决VirtualBox/VMware虚拟机在win10下运行ensp时AR启动卡死问题
未经授权,禁止转载!1.环境准备与确认首先 ,确认你的虚拟机是否是windows10,例如我的虚拟机操作系统如下:2.然后,确认你的环境是否正确,重点查看VirtualBox是否是"VirtualBox-5.2.44-139111…...
快速原型验证:利用快马平台对比openclaw切换不同ai模型的代码生成效果
最近在做一个前端小工具时,突然想到一个问题:不同AI模型生成的代码效果到底有多大差异?正好发现了InsCode(快马)平台这个神器,用它快速搭建了个对比工具,整个过程比想象中简单多了。 需求分析 核心需求很简单ÿ…...
AI赋能:快马平台智能生成个性化git安装配置学习方案
最近在团队协作开发时,发现很多新同学在git环境配置上花费了大量时间。不同操作系统、不同开发场景下的配置需求差异很大,传统教程往往难以覆盖所有情况。正好体验了InsCode(快马)平台的AI辅助功能,发现它能智能生成个性化的git学习方案&…...
提升编码效率新思路:快马ai工具链替代传统ide破解需求
作为一名前端开发者,我经常遇到重复造轮子的情况。每次新建项目都要从头搭建目录结构,反复写类似的表单验证逻辑,还要花大量时间调整CSS兼容性。最近发现InsCode(快马)平台的AI工具链,意外解决了这些痛点。 智能代码补全体验 传统…...
脚手架封装
为什么要做脚手架? 统一项目规范,用脚手架强制统一:结构、规范、依赖、代码风格 提升开发效率,节省大量时间。新建项目不用手动配:路由、请求封装、环境变量、Eslint、Prettier 降低新员工上手成本,新人不用…...
手把手教你:如何根据微软官方文档修改bat脚本,实现Excel文件格式的任意批量转换
从XLS到XLSX:基于微软官方文档的批处理脚本进阶指南 在数据处理工作中,Excel文件格式转换是常见的需求场景。许多用户可能只满足于使用现成的转换工具,但对于技术爱好者或需要频繁处理不同格式转换的专业人士来说,掌握如何根据微…...
