Cortex-A7支持的内存类型详解及配置举例

news2024/12/22 23:49:13

0 参考资料

Introduction to memory protection unit management on STM32 MCUs.pdf
ARM ArchitectureReference Manual ARMv7-A and ARMv7-R edition.pdf

1 Cortex-A7支持的内存类型详解

1.1 内存类型

ARM架构处理器支持的内存类型分为三种,分别是Normal memory(正常内存)、Device memory(设备内存)、Strongly ordered memory(强序内存)。关于这三种内存类型的stm32官方释义如下:
在这里插入图片描述
Normal memory:
CPU访问这种类型内存可以以最高效的方式加载和存储字节、半字和字(编译器不知道内存区域类型)。对于Normal memory的内存区域,CPU不一定按照程序中列出的顺序执行加载/存储操作。
Device memory:
对于这种类型的内存区,加载和存储要严格按照次序进行,这样是为了确保寄存器按照正确顺序设置。
Strongly ordered memory:
程序完全按照编程列出的顺序进行,CPU在执行程序流中的下一条指令之前必须等待当前加载/存储指令执行结束(有效总线访问)。这可能会导致性能下降。

1.2 内存管理方式

提到Cortex-A7的内存管理方式就离不开MMU(内存管理单元)和页表。MMU负责将虚拟地址转换为物理地址,而页表则存储了虚拟地址和物理地址的映射关系。下面便是一级页表(段页表)描述符格式:
在这里插入图片描述
后文均以一级页表的描述符格式展开介绍。

1.2 内存的Cache策略 TEX[2:0]、C、B

TEX[2:0]:类型扩展位
C:Cache使能位
B:写Buffer使能位
写Buffer解释:

写缓冲器是一个非常小的高速存储缓冲器,用来临时存放处理器将要写入到主存中的数据,在没有写缓冲器的系统中,处理器直接写数据到主存中。在带有写缓冲器的系统中,Cache直接将数据先写到写缓冲器中,然后写缓冲器再以低速写入主存中。这就将高速的CPU和Cache从对主存的低速读写中脱离了出来。

写Buffer在CPU中的架构图如下:
在这里插入图片描述
当TEX[2]=1时,内存区域使能Cache,其余编码定义了内部和外部缓存属性:TEX[1:0]位组成外部Cache策略。C,B位组成内部Cache策略。内部和外部使用的编码属性相同。
(1)当TEX[2]为0时,TEX[1:0]、C、B组合形成的内存Cache策略如下:
在这里插入图片描述
在这里插入图片描述
说明:
Device memory和Strongly ordered memory均不使能Cache,但后者不使能Buffer,对内存的加载/存储顺序要求更严格。区别在于前者指令执行完以后数据操作不一定会立即生效(要等到写Buffer写入完成),而后者指令执行完数据操作立即生效。

当TEX[2]为1时,TEX[1:0]、C、B组合形成的内存Cache策略如下:
在这里插入图片描述
按照下表决定Inner和Outer的Cache配置:
在这里插入图片描述
说明:
(1)CPU读取数据
(1.1)Cache数据命中
CPU直接从Cache读取数据
(1.2)Cache数据未命中
Read through:直接从内存读取数据,数据不会缓存到Cache
Read allocate:先把内存中的数据读取到Cache,再从Cache中读取数据
(2)CPU写入数据
(2.1)Cache数据命中
Write through:把数据同时写入Cache和内存
Write back:先把数据写入到Cache,并不同步更新memory(后端存储)。只是在Cache区要被新进入的数据取代时,才更新memory(后端存储),这种方式也称作flush方式。
(2.2)Cache数据未命中
Write allocate:先把要写的数据载入到Cache中,写Cache,然后再通过flush方式写入到内存中
No write allocate:直接把要写的数据写入到内存中
注意:只要开启了Cache就默认开启了Read allocate。
什么是inner cache和outer cache?
通常内部集成的cache属于inner cache,外部总线AMBA上的cache属于outer cache。Inner是指最内层的缓存,即最接近CPU的缓存,并且总是包括最低级别的缓存。由Inner缓存属性控制的缓存不能位于由Outer缓存属性控制的缓存之外。在具体的实现中可能没有outer 缓存。比如有L1,L2, L3的三级缓存架构中,三个缓存可能都是inner缓存,而不存在outer缓存。也可以是L1是inner缓存,L2和L3是outer缓存。
以stm32MP135为例,其具有32KB的指令/数据一级缓存和128KB的未定义二级缓存。从以下框图可以看出,L1缓存属于inner缓存,L2缓存属于outer缓存。
在这里插入图片描述

1.3 内存共享配置S

在这里插入图片描述
当S=0时Normal memory不可共享,当S=1时Normal memory共享。可以看到只有Normal memory有独立的共享配置,而Strongly ordered memory由于不使能Cache及buffer不存在数据共享问题,只能是共享(相当于共享位配置无效)。Device memory由于使能了Buffer支持使能/失能共享,长描述符可配置为:Outer Shareable Device memory、Inner Shareable Device memory、Non-shareable Device memory、UNPREDICTABLE,短描述符可配置为:Shareable、Non-shareable。
Device memory的共享配置ARM官方建议如下:

ARM不建议使用“外部可共享(Outer Shareable Device memory)”或“可共享(Shareable)”以外的可共享性属性标记设备内存。

ARM原文如下:
在这里插入图片描述
本文举例使用的短描述符定义内存类型仅支持失能/使能共享(对应于ARM建议的可共享(Shareable))。如果需要配置为Inner Shareable Device memory,需要使用长描述符定义的内存类型。长描述符支持2位共享位配置,配置如下:
在这里插入图片描述
此外,在基于Cortex-M7的stm32H743中,开启了共享就基本等同于关闭了Cache,极大影响了性能。原文描述如下:
在这里插入图片描述

1.4 不可执行XN

在这里插入图片描述
不可执行XN位被设置为0表示可以从内存区域执行代码,被设置为1表示不可从内存区域执行代码。

2 Cortex-A7内存配置类型举例

下面以基于Cortex-A7内核的stm32MP135的内存配置为例,分析其4GB寻址空间被配置成什么内存类型,加深我们对于内存类型的理解。
下图为stm32MP135内存区域划分及其对应的内存属性:
在这里插入图片描述

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

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

相关文章

airflow看不到任务日志解决方案

1. 基础信息 airflow 版本:2.5.3 2. 问题现象 airflow web-server 界面,看到某些任务的具体运行日志,只有少量日志,如下图所示: 具体日志内容如下: na-fudao-data-airflow-test-2-21.alibji.zybang.com…

某视频云平台存在未授权窃取用户凭据漏洞

我和你一样,历经破碎、痛苦的生活,却未垮掉,每一日都从承受的苦难中,再一次将额头浸入光明 漏洞详情: 某视频云平台存在未授权访问漏洞,攻击者可以直接访问平台的API接口文档,从而获取系统的A…

【大模型】Reflextion解读

前言:一种大模型强化学习技术,将传统的梯度更新时的参数信号替换成上下文的语言总结,过程和人类反思相似。区别与RLHF,Reflextion是agent自我反思,RLHF是人类反馈。 目录 1. 基础知识1.1 强化学习1.2 大模型Agent 2. 创…

Upload-LABS通关攻略【1-20关】

Pass-01 第一关是前端JS绕过 上传一个php文件显示只能上传特定后缀名的文件 这里将1.php改为1.jpg直接进行抓包,在数据包中将jpg改为php放行 文件上传成功,邮件图片新建页面打开 可以访问到1.php文件,则一句话密码上传成功 使用蚁剑 进行连接…

探秘DevSecOps黄金管道,安全与效率的完美融合

软件应用的安全性已成为企业和用户关注的焦点,DevSecOps作为一种将安全融入开发和运维全过程的理念和实践,旨在消除传统开发模式中安全被后置处理的弊端。DevSecOps黄金管道(Golden Pipeline)是实现这一理念的核心框架&#xff0c…

蜂鸣器奏乐

一、粗略了解简谱 拍号:如图,“2”表示一个小节有2拍,“4”表示4分音符为一拍 终止线表示歌曲结束 注意:以下音符都按以四分音符为一拍计算拍数 四分音符: 唱一拍 二分音符: 某一个音右边有一个小横线&…

OpenAI GPT3 Search API not working locally

题意:"OpenAI GPT-3 搜索 API 在本地无法工作" 问题背景: I am using the python client for GPT 3 search model on my own Jsonlines files. When I run the code on Google Colab Notebook for test purposes, it works fine and returns …

文件上传漏洞详解(持续更新…)

第一关 步骤一,打开第一关先点击浏览上传一个jpg格式的图片 步骤二,打开BP修改jpg为php然后放包 步骤三,右键打开图像 成功解析 步骤四,打开蚁剑 第一关还是蛮简单的 第二关 步骤一,打开第二关先点击浏览上传一个j…

leetcode637. 二叉树的层平均值,广度优先搜索BFS

leetcode637. 二叉树的层平均值 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。…

跑通llama-factory

1.在ubuntu下安装环境 git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e “.[torch,metrics]” pip install --no-deps -e . 在本地windows,打开http://0.0.0.0:7863/,总是显示无法打开界面。 之后在…

!!学习整理知识模块——关于【如何本地搭建Whisper语音识别模型】/请按需收藏!!

成长路上不孤单😊【14后,C爱好者,持续分享所学,如有需要欢迎收藏转发😊😊😊😊😊😊😊!!!!&#xff…

经验风险最小化和极大似然估计的关系

一、经验风险定义 给定一个训练数据集 T { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} T{(x1​,y1​),(x2​,y2​),...,(xN​,yN​)},模型f(X)关于训练数据集的平均损失称为经验风险(Empirical…

冻死你都觉得简单

小说大纲 标题:《学霸的豪门对决》 背景设定: 两个家族在商业界拥有举足轻重的地位,但因为历史原因,两家长期处于竞争状态。主角们在顶级私立学校就读,既是学霸也是家族的继承人。 主要人物: 男主角&a…

【前端开发必备小技巧】前端代码规范Vue篇

文章目录 🟢 前端代码规范🟢 一、前端代码规范Vue篇👉1、Vue编码基础👉1.1、组件规范👉1.2、模板中使用简单的表达式👉1.3、指令都使用缩写形式👉1.4、 标签顺序保持一致👉1.5、必须…

<数据集>车辆识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:3002张 标注数量(xml文件个数):3002 标注数量(txt文件个数):3002 标注类别数:21 标注类别名称:[ambulance, army vehicle, auto rickshaw, bicycle, bus, car, garba…

互联网平台大模型网络架构设计

字节跳动:大模型网络实践分享 自2019年起,字节跳动公司便开始着手白盒项目。2020年,推出了首款接入交换机——25G型号,随后逐步实现软硬件的自主研发。在当前一代产品中,已经实现了100G接入、25.6T400G互联&#xff0c…

SprinBoot+Vue实验室考勤管理小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平…

信息学奥赛一本通/openjudge Crossing River

题目 一本通题目入口 openjudge题目入口 (注:由于一本通题面描述的可能有些欠缺,所以这里的题面采用openjudge英文翻译后的题面) 题目分析 首先我们来看样例,为什么样例的结果是17呢?首先观察,“5”和“…

node环境安装、vue-cli搭建过程、element-UI搭建使用过程

vue-cli 官方提供的一个脚手架,用于快速生成一个 vue 的项目模板;预先定义好的目录结构及基础代码,就好比咱们在创建 Maven 项目时可以选择创建一个骨架项目,这个骨架项目就是脚手架,我们的开发更加的快速 前端项目架…

Spark-Job启动、Stage划分

一、上下文 《Spark-driver和executor启动过程》详细分析了driver和executor的启动,此时资源已经给我们分配好了,且Application也已经注册完成。下面我们就来看看Spark是如何启动job并根据DAG来划分Stage的 二、Job启动 Spark RDD中的算子分为Transfo…