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

news2024/9/24 9:20:48

存储系统功能

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.coloradmin.cn/o/2110596.html

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

相关文章

超详细!!!electron-vite-vue开发桌面应用之创建新窗口以及主进程和子进程的通信监听(十二)

云风网 云风笔记 云风知识库 一、新建打开窗口 1、在electron/main.ts中加入主进程打开窗口逻辑代码 import { ipcMain } from "electron"; ipcMain.handle("open-win", (_, arg) > {const childWindow new BrowserWindow({webPreferences: {preloa…

代码执行漏洞-Log4j2漏洞

1.执行以下命令启动靶场环境并在浏览器访问 cd log4j/CVE-2021-44228docker-compose up -ddocker ps 2.先在自己搭建的DNSLOG平台上获取⼀个域名来监控我们注⼊的效果 3.可以发现 /solr/admin/cores?action 这⾥有个参数可以传,可以按照上⾯的原理 先构造⼀个请求…

TomCat环境配置(实验报告)

实验 Tomcat 实验环境配置 一、实验目的 1、掌握Tomcat的安装和启动 2、掌握在IntelliJ IDEA中配置Tomcat的方法 二、实验环境 1、硬件:PC电脑一台,网络正常; 2、配置:Windows10系统,内存8G及以上,硬盘…

LAN变压器的DCR

在变压器技术中,DCR代表直流电阻(DC Resistance)。它是变压器线圈在直流条件下测得的电阻值,通常用来评估变压器的质量和效率。直流电阻是线圈材料和尺寸的一个函数,它与变压器线圈的发热量和功率损耗直接相关。在变压…

在平板电脑上使用Chrome观看视频的最佳技巧

随着移动设备的普及,越来越多的人选择在平板电脑上观看视频。谷歌浏览器(Chrome)作为一款功能强大的网页浏览器,提供了许多方便的功能来优化你的视频观看体验。以下是一些在平板电脑上使用Chrome观看视频时的最佳技巧。 &#xf…

个人旅游网(2)——功能详解——用户登录注册功能

文章目录 一、用户登录1.1、接口详解1.1.1、isLogged (判断用户是否登录)1.1.2、find-by-telephone(输入手机号时校验手机号是否注册)1.1.3、send-message(发送验证码)1.1.4、login-by-telephone(登录按钮)…

给力!Python配置文件,这一篇就够了!

在开发过程中,我们常常会用到一些固定参数或者是常量。对于这些较为固定且常用到的部分,往往会将其写到一个固定文件中,避免在不同的模块代码中重复出现从而保持核心代码整洁。 这里插播一条粉丝福利,如果你在学习Python或者有计划…

修改设置内以及手机桌面的软件icon和名称

// 设置 - 应用和元服务内修改软件icon和名称等相关信息 // 位置: 设置 - 应用和元服务 // AppScore/app.json5// 这里不是在桌面看, 是在设置 - 应用和元服务内看的 // 模拟器内: 版本号改了之后要卸载后重新安装才能看 {"app": {"bundleName"…

【GC】垃圾回收原理分析

本文基于小许先生的编程世界学习了gc机制。 面试官:了解gc机制吗?简述一下。 我:golang为清除不再被使用的对象,回收内存的机制。采用了三色标记法混合写屏障。首先开启屏障,一旦在gc期间发生指针引用变化,…

解决启动Nginx时80端口被占用的问题

文章目录 前言 解决方法1. 搜索服务打开![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/c7600d266d194bdb864f7660a5bc5890.png)2. 找到World Wide Web 发布服务这个服务,右键属性,将它的启动类型改为手动,然后停止掉该服务。3. 此…

虚拟化技术:新能源汽车空调控制系统的智能新突破

汽车生产中,空调系统已经成为标配,空调系统的性能是衡量一辆汽车是否舒适的重要指标之一。 01.汽车空调系统组成 (1) 制冷系统:制冷系统的功能是给汽车内部提供冷空气,主要由压缩机、冷凝器、膨胀阀以及蒸发器组成。首先由压缩机…

释放国产光耦合器的潜力

光耦合器,也称为光隔离器,已成为现代电子产品中不可或缺的组件。它们的主要功能是在电路的不同部分之间提供电气隔离,确保安全并防止干扰。随着技术的发展,光耦合器也在不断发展,国产光耦合器现在在性能和成本方面都具…

回归预测|基于粒子群优化核极限学习机PSO-KELM结合Adaboost集成的数据预测Matlab程序 多特征输入单输出

回归预测|基于粒子群优化核极限学习机PSO-KELM结合Adaboost集成的数据预测Matlab程序 多特征输入单输出 文章目录 一、基本原理1. 数据预处理2. PSO优化(粒子群优化)3. KELM训练(核极限学习机)4. AdaBoost集成5. 模型评估和优化6.…

004: VTK读入数据---vtkImageData详细说明

VTK医学图像处理---vtkImageData类 目录 VTK医学图像处理---vtkImageData类 简介: 1 Mricro软件的安装和使用 (1) Mricro安装 (2) Mricro转换DICOM为裸数据 2 从硬盘读取数据到vtkImageData 3 vtkImageData转RGB或RGBA格式 4 练习 总结 简介:…

Minikube Install Kubernetes v1.18.1

文章目录 简介安装工具配置代理运行集群检查集群加入rancher 简介 模拟客户环境,测试 kubernetes v1.18.x 是否可以被 rancher v2.9.1 纳管。 安装工具 docker 安装Install and Set Up kubectl on Linux 安装 minikube 配置代理 docker proxylinux proxy 运行…

python进阶篇-day07-进程与线程

day06进程与线程 一. 进程 每个软件都可以看作是一个进程(数据隔离) 软件内的多个任务可以看作是多个线程(数据共享) 单核CPU: 宏观并行, 微观并发 真正的并行必须有多核CPU 多任务介绍 概述 多任务指的是, 多个任务"同时"执行 目的 节约资源, 充分利用CPU资源, …

万龙觉醒辅助:VMOS云手机辅助前期宝物选择!万龙觉醒怎么挂机?

《万龙觉醒》作为一款策略战争类游戏,玩家们在日常进行游戏时,可能会遇到游戏时间不足或无法长时间在线的问题。而通过使用VMOS云手机,可以实现24小时游戏云端在线托管,无需手动操作,彻底解放双手,随时随地…

【人工智能学习笔记】1_人工智能基础

本系列是个人学习《阿里云人工智能工程师ACA认证免费课程(2023版)》的笔记,仅为个人学习记录,欢迎交流,感谢批评指正 人工智能概述 智能的三大能力:感知、记忆与思维、学习与适应能力人工智能的定义 明斯基…

4 个最佳 3D 数据可视化工具(免费和付费)

摘要: 在当今的技术时代,数据可视化在软件测试领域发挥着相当重要的作用。简而言之,数据可视化是设计并分析数据视觉表示的过程。其中有一些顶级的数据可视化工具超出了工作范围。在数据可视化工具的帮助下,变得相当简单、更加准确。这是因为这些工具进一步消除了对手工劳动…

经济不景气?相反,这才是普通人赚钱的绝佳机会!

“日子越来越难了!”身边类似的抱怨越来越多。 想想也是,这两年市场低迷、房地产暴雷、各行业内卷.....即便兜里有钱的,也面临资产缩水的风险。 但好在从去年开始,国内外AI企业黑马连出,AI文本、图片、视频生产模型直接颠覆了传…