Cortex-M3架构学习:存储器系统

存储系统功能

CM3 的存储器系统与从传统 ARM 架构的相比,进行如下改革:
  • 它的存储器映射是预定义的,并且还规定好了哪个位置使用哪条总线。
  • CM3 的存储器系统支持所谓的“位带”(bit-band)操作。通过它,实现了对单一比特的原子操作。
  • CM3 的存储器系统支持非对齐访问和互斥访问。
  • CM3 的存储器系统支持 both 小端配置和大端配置。

存储器映射 

寄存器映射概念 

在嵌入式系统中,外设(如 UART、GPIO、定时器等)通常由硬件寄存器控制。这些寄存器用于配置外设、控制其行为、读取其状态和数据。

寄存器映射指的是将这些外设的控制寄存器通过内存地址空间映射,使得处理器可以通过读写内存地址的方式来访问这些寄存器。

寄存器映射的工作原理就是将每个外设的寄存器分配给一个特定的内存地址范围。

比如说,假设我们有一个 GPIO 外设,这个外设有几个寄存器用于配置其引脚模式、输出状态和输入状态。每个寄存器都会被映射到处理器的内存地址空间中的某个地址范围内,处理器可以通过读取或写入这些内存地址来读取或者控制其行为。

存储器映射总览

CM3 只有一个单一固定的存储器映射。这一点极大地方便了软件在各种 CM3 单片机间的移植。

CM3 的地址空间是 4GB,示意图如下,

下面对各个区进行详细介绍:

代码区: 

  • 代码区映射的地址是0x0000_0000 到 0x1FFF_FFFF,大小是512MB,通常映射到片内的闪存(Flash)或只读存储器(ROM) 中,用于存储程序代码。
  • 代码区与数据区(如 SRAM)不同,代码区通常是只读存储器ROMFlash),这意味着一旦程序被写入代码区,除非进行固件升级重写操作,否则代码不会被修改。
  • 在 Cortex-M3 系统中,中断向量表 通常位于代码区的起始地址(0x0000 0000)。
  • 代码区主要存储程序指令包括:主程序代码,函数和库代码,中断向量表,嵌入式操作系统代码。
  • 代码区保存了程序的机器指令。处理器通过程序计数器(PC,R15) 来从代码区加载指令并执行它们。

片上SRAM:

  • 片上SRAM映射地址是0x2000_0000 – 0x3FFF_FFFF,大小512MB,通常映射到一个固定的内存地址范围(如上)。
  • 片上SRAM通常用于存储运行时数据,例如全局变量堆栈(进程堆栈(PSP)和异常处理中使用的主堆栈(MSP))、以及动态分配的内存(如malloc或操作系统的内存管理)。
  • SRAM 是一种易失性存储器,这意味着一旦系统掉电或重启,存储在 SRAM 中的数据将会丢失。
  • 片上SARM区的下部,有一个 1MB 的区间,被称为“位带区”,该位带区还有一个对应的、 32MB 的 “位带别名(alias) 区”,可以容纳了 8M 个“位变量”。(位带区后续介绍)

片上外设区:

  • 片上外设区映射地址是0x4000_0000 – 0x5FFF_FFFF,大小512MB,表示将外设的控制寄存器映射到特定的内存地址范围内。
  • 处理器通过访问片上外设区中的寄存器来配置和控制外设。每个外设通常会映射一组控制寄存器,这些寄存器具有特定的功能,比如启动、停止、设置参数或读取状态。
  • 片上外设区中也有一条 32MB 的位带别名,以便于快捷地访问外设寄存器,用法与内部 SRAM 区中的位带相同。

片外RAM区:

  • 片外RAM区映射地址是0x6000_0000 – 0x9FFF_FFFF,大小1GB。
  • 外部 RAM 是指通过外部总线连接到处理器的物理 RAM,通常用于补充处理器的内部 RAM。
  • CM3最大的外部RAM就是1GB。

片外外设区:

  • 片外RAM区映射地址是0xA000_0000 – 0xDFFF_FFFF,大小1GB。
  • 对于外部连接的外设,它们的寄存器会被映射到处理器的片外外设区。这个区域用于连接处理器芯片外部的外设,而不是处理器片内集成的外设。

 系统区:

  • 系统区映射地址是0xE000_0000 – 0xFFFF_FFFF,大小512MB,此区不可执行代码。
  • 系统区包括了系统级组件,内部私有外设总线 s,外部私有外设总线 s,以及由提供者定义的系统外设。

备注:Cortex-M3架构采用的是指令总线和数据总线分离的哈佛(Harvard)架构,为了充分利用 Harvard 架构的优势,最理想的方案是将程序(指令)放置在代码区(通常是 Flash 或 ROM),将数据放在 SRAM(内部或外部 RAM) 中。这样可以让取指令和数据访问分别通过指令总线和数据总线进行并行操作,从而最大限度提高系统效率。

存储器默认访问许可 

 CM3 有一个默认的存储访问许可,它能防止使用户代码访问系统控制存储空间,如下表,

 

 位带操作

 在上面的映射示意图我们可以看到, CM3 中,有两个区中实现了位带操作。

其中一个是SRAM 区的最低 1MB 范围,第二个则是片内外设区的最低1MB范围。

位带操作的意义是,可以使用普通的加载/存储指令来对单一的比特进行读写。

每一个位带区都有一个32MB的位带别名区。

位带区和位带别名区对照关系如下图,

其实位带操作很好理解,就是把位带区的每一个字节的每一位都用位带别名区的一个地址表示,然后我们要控制位带区的某一位的时候,就直接操作位带别名区的一个地址就可以了。 

由于别名区地址对应的也是一个32位的字节,所以这个32位字节只有最低位(LSB)才有效。

在进行读操作时,处理器实际上会将这个别名地址转换为原始的位带地址,并从位带区中读取一个完整的字,处理器会根据别名地址中的位号,右移该字中的某个位到最低有效位(LSB),将这个LSB 的值返回给你。

以下是书上的一个例子,(建议对照上述的图理解)

 以下是位带区到别名区的映射公式,

bit_word_addr = bit_band_base + (byte_offset × 32) + (bit_number × 4)
  • bit_word_addr位带别名区中的某个地址。
  • bit_band_base位带别名区的起始地址(SRAM 位带别名区的起始地址是 0x2200 0000,外设位带别名区的起始地址是 0x4200 0000)。
  • byte_offset你想要控制的字节相对于位带区起始地址的偏移。
  • bit_number你想要控制的字节中的位号(0~7)

互斥访问 

互斥访问(Mutual Exclusion Access)是指在多任务、多线程或多处理器系统中,保证对共享资源(如内存、变量、外设等)的访问时,只有一个任务或线程能够在某一时刻访问该资源,而其他任务或线程在此时必须等待。 

一个例子如下,

假设有两个任务同时修改一个共享变量 x,并且操作的流程是读取变量 x对其进行加法操作、然后将结果写回变量 x。如果这两个任务同时运行,竞态条件可能会导致以下情况,

  • 任务 1:读取变量 x 的值(例如,读取值为 5)。
  • 任务 2:读取变量 x 的值(同样是 5,因为任务 1 还没有完成)。
  • 任务 1:将 x 的值加 1,然后写回 x(值为 6)。
  • 任务 2:将 x 的值加 1,然后写回 x(值为 6,而不是期望的 7,因为任务 2 覆盖了任务 1 的结果)。

为了解决这个问题,必须确保对 x 修改时不会被其他任务打断,这就需要互斥访问。 

 

端模式

 CM3 支持 both 小端模式和大端模式。

  • 小端模式(Little Endian):低位字节存储在内存的低地址, 高位字节存储在高地址。
  • 大端模式(Big Endian):高位字节存储在内存的低地址,低位字节存储在高地址。

CM3 处理器主要采用小端模式(Little Endian)作为默认的内存存储方式。在这种模式下,处理器以小端格式处理多字节数据,如 16 位或 32 位的整数。 

CM3 处理器也支持大端模式(Big Endian),我们可以通过配置来选择大端模式。

CM3的小端模式和ARM7中定义相同,大端模式不同。

ARM7 中,大端的方 式被称为“字不变大端”,而在 CM3 中,使用的是“字节不变大端”。
CM3的字节不变大端,存储器视图如下,

在AHB上的数据如下,

 

 ARM7 的字不变大端,在 AHB 上的数据如下,

CM3 中,是在复位时确定使用哪种端模式的,且运行时不得更改。指令预取永远使用小端模
式,在配置控制存储空间的访问也永远使用小端模式(包括 NVIC, FPB 等)。另外,外部私有总线 地址区 0xE0000000 0xE00FFFFF 也永远使用小端模式

 

Cortex-M3 提供了一个名为系统控制块(System Control Block, SCB)中的AIRCR 寄存器,其中的 Endianess 字段用于配置处理器的端模式。

  • SCB_AIRCR 寄存器地址:0xE000ED0C
  • Endianess 位:SCB_AIRCR 寄存器的 15 位控制系统是大端模式还是小端模式。
  • bit[15] = 0 时,处理器工作在小端模式(默认模式)。
  • bit[15] = 1 时,处理器工作在大端模式

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

同时安装多个nodejs版本可切换使用,或者用nvm管理、切换nodejs版本(两个详细方法)

目录 一.使用nvm的方法: 1.卸载nodejs 2.前往官网下载nvm 3.安装nvm 4.查看安装是否完成 5.配置路径和淘宝镜像 6.查看和安装各个版本的nodejs 7.nvm的常用命令 二.不使用nvm,安装多个版本: 1.安装不同版本的nodejs 2.解压到你想放…

【Python】从基础到进阶(二):了解Python语言基础以及数据类型转换、基础输入输出

🔥 个人主页:空白诗 文章目录 一、引言二、基本数据类型转换1. 隐式转换2. 显式转换 三、基本输入输出1. 输入(input)2. 输出(print)3. 案例:输入姓名、年龄、身高以及体重,计算BMI指…

猎板通信PCB动态:苹果16系列多款设备上线,PCB供应商的机遇与挑战!

在最新的苹果供应链动态中,苹果公司对于PCB供应商的选择标准非常严格,主要考虑因素包括技术能力、生产规模、质量控制、成本效益、供应链稳定性以及环境和社会责任等。随着苹果产品技术的不断进步,PCB供应商也需要具备相应的技术升级能力&…

基于vue框架的成都住房租赁系统82ml7(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:用户,房东,房屋类型,房源信息,租赁信息,合同信息,租金缴纳 开题报告内容 基于Vue框架的成都住房租赁系统开题报告 一、引言 随着城市化进程的加速和人口流动的日益频繁,成都作为西南地区的经济、文化中心,住房…

关于OceanBase 多模一体化的浅析

在当今多元化的业务生态中,各行各业对数据库系统的需求各有侧重。举例来说,金融风控领域对数据库的高效事务处理(TP)和分析处理(AP)能力有着严格要求;游戏行业则更加注重文档数据库的灵活性和性…

【笔记】408刷题笔记

文章目录 三对角三叉树求最小带权路径UDP报文首部和TCP报文首部IP报文首部TCP报文首部UDP报文首部 刷新和再生的区别地址译码 为了区分队空队满,可以使用三种处理方式 1)牺牲一个单元 队头指针在队尾指针的下一位置作为队满的标志 队满条件:(…

make、cmake、qmake的区别和联系

基本概念与用途 make: 定义:make是一个用于自动化构建项目的命令行工具。用途:它通过读取Makefile(或makefile)文件来执行编译、链接等操作,从而构建整个项目。Makefile中定义了项目中的文件依赖关系以及…

“CSS 定位”如何工作?(补充)——WEB开发系列34

CSS定位是一个非常重要的布局工具,它允许我们精确地控制元素的位置,从而创建复杂的布局效果。定位允许你从正常的文档流布局中取出元素,并使它们具有不同的行为,例如放在另一个元素的上面,或者始终保持在浏览器视窗内的…

数据库设计中的需求分析

在数据库设计中,需求分析 是至关重要的一步。它不仅是设计过程的起点,也是后续步骤的基础。如果需求分析出现问题,那么后续所有设计阶段的结果都会受到影响,最终可能导致整个设计返工,耗费大量时间和资源。因此&#x…

KubeBlocks 如何降低管理多种数据库的学习门槛

什么是 KubeBlocks KubeBlocks 是一个开源的 Kubernetes 数据库 operator,能够帮助用户在 Kubernetes 上运行和管理多种类型的数据库。据我们所知,大多数数据库 operator 通常只能管理某种特定类型的数据库,例如: CloudNativePG…

基于SSM开发的校园心理咨询平台系统的设计与实现---附源码80915

目 录 1 绪论 1.1 研究背景 1.2开发现状 1.3论文结构与章节安排 2 校园心理咨询平台系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 2.4…

安卓13删除app 链接库警告弹窗Detected problems with app native

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码修改彩蛋1.前言 有些客户的APP,打开首次会弹窗提示窗口, Detected problems with app native libraries (please consult log for detail):,需要删除这个窗口,避免挡住用户APP。而且这个提示有些app是以t…

MapBox Android版开发 4 国际化功能v11

MapBox Android版开发 4 国际化功能v11 前言遇到的问题国际化功能原文给出的方案(V10版)migrate-to-v11适用于V11版的代码 示例MapStyle类运行效果图 前言 在前文MapBox地图样式v11中,使用Style的localizeLabels方法本地化地图语言。但Mapbox Standard样式和Mapbox…

红队C2工具Sliver探究与免杀

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330&scene21#wechat_redirect 《网安面试指南》…

纯国产芯片LT8911EXB,MIPI转EDP信号转换器,LT8911B升级版本

以下为视频转换芯片LT8911EXB的简介 LT8911EXB MIPI DSI/CSI到eDP转换器具有单端口MIPI接收器,1时钟通道和4每个数据通道的最大运行速度为2.0Gbps;一个最大输入带宽为8.0Gbps。转换器解码输入MIPIDSI 16/18/24/30/36位RGB数据包,并将格式化的视频数据流转…

异步文件操作的革命:探索aiofiles的魔力

文章目录 异步文件操作的革命:探索aiofiles的魔力1. 背景介绍2. aiofiles是什么?3. 如何安装aiofiles?4. 简单的库函数使用方法5. 场景应用6. 常见Bug及解决方案7. 总结 异步文件操作的革命:探索aiofiles的魔力 1. 背景介绍 在现…

【Java-反射】

什么是反射? JAVA反射机制是在运行状态中,创建任意一个类,能获取这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言…

RHEL 7 安装配置( Linux 网络操作系统 02)

一、虚拟机安装 我们的每台电脑都已经安装了VMware 虚拟机,其安装相当简单,在此不再赘述。可以参考如下链接: VMWare安装傻瓜式教程 (大家可以关注老师的博客,也建议大家写博客。) 二、红帽 rhel 7 安装 找…

IEC103设备数据 转 IEC61850项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 4 配置VFBOX网关采集103设备数是 2 5 用IEC61850协议转发数据 4 6 网关使用多个逻辑设备和逻辑节点的方法 6 7 IEC103协议说明 8 8 案例总结 9 1 案例说明 设置网关采集IEC103设备数据把采集的数据转成IEC61850协议转发…

通过 python 的 Opstrat 绘制收益图加深期权策略理解

本文介绍介绍一个 Python 包- opstrat,通过它绘制期权收益图,帮助我们理解期权策略的收益风险比。 什么是期权收益图? 期权收益图展示了某个期权或期权组合的盈亏情况,如下图中,展示一张标的现价 100,行权…