【Cortex-M3权威指南】学习笔记3 - 存储系统

目录

    • 存储系统
      • 存储器映射
      • 存储器各种访问属性
      • 存储器的缺省访问许可
      • 位带操作
      • 非对齐数据传输
      • 互斥访问
      • 端模式

存储系统


存储器映射

CM3 预定义存储器映射简图(CM3 的地址空间是 4GB )

在这里插入图片描述


片上 SRAM:大小 512MB,拥有 1MB 位带区,32MB 位带别名区;而位带别名区里面的每个字对应位带区的一个比特

片上外设:定义个片上 SRAM 几乎一致,但不可以执行命令

片外外设、片外 RAM:各占 1GB 用于连接外部,但片外外设区同样不可执行命令

总结:外设区不可以执行命令,而 RAM 区均可执行命令


最后的 512MB 分配给 CM3 的系统级组件,内部私有外设总线 s,外部私有外设总线 s,以及由提供者定义的系统外设

私有外设总线有两条

  • AHB 私有外设总线,只用于 CM3 内部的 AHB 外设,它们是:NVIC, FPB, DWT 和 ITM
  • APB 私有外设总线,既用于 CM3 内部的 APB 设备,也用于外部设备

NVIC 所处的区域叫做“系统控制空间(SCS)”


存储器各种访问属性

CM3 为存储器的访问设置了 4 个属性

  • 可否缓冲(Bufferable)
  • 可否缓存(Cacheable)
  • 可否执行(Executable)
  • 可否共享(Sharable)

CM3 片上默认无配备缓存,而可以使用外设缓存,此时就需要引入缓存设置来进行管理


存储器的缺省访问许可

CM3 在未开启 MPU(存储保护单元)时,缺省访问许可才能生效

如果启用了 MPU,则会在地址空间划分多个区,为不同区设置不同访问权限


位带操作

位带操作(Bit Banding)是一种在嵌入式系统中进行位级操作的技术。它通过将特定的位与内存地址进行映射,以实现对单个位的原子操作。

那片上 SRAM 作为介绍,它拥有一个 1MB 位带区,以及一个 32MB 位带别名区,下面时对应位带操作流程:

  1. 位带别名区将单个比特膨胀为 32 位的字
  2. 通过访问这些字,从而达到访问原始比特的目的

一般而言,位带操作包含:读、改、写三步,而这三步之间夹杂着两个极短的切换空挡,若多个进程并发执行位带操作,可能会导致紊乱现象(即冲突)

而 CM3 位带操作改进了这一缺点,使三步变成了一个原子操作,完美解决了


C 编译器不支持位带操作,故需要使用 define 定义

使用 define 定义一个位带别名区地址:#define DEVICE_REG0 ((volatile unsigned long *) (0x40000000))


非对齐数据传输

最低有效位(LSB):即二进制数中最右边的一位数字;
最高有效位(MSB):即二进制数中最左边的一位数字;

在 CM3 构架下,非对齐的数据传送只发生在常规的数据传送指令中,如 LDR/LDRH/LDRSH


互斥访问

CM3 使用互斥访问技术取代了传统 ARM 中的 SWP 指令

在互斥访问操作下,允许互斥体所在的地址被其它总线 master 访问,也允许被其它运行在本机上的任务访问,而 CM3 能够“驳回”有可能导致竞态条件的互斥写操作

互斥访问的读写操作对应的指令为

LDREX/STREX, LDREXH/STREXH,
LDREXB/STREXB

在使用互斥访问时,LDREX/STREX 必须成对使用

严格的驳回规定(目前大多数情况下选择):

  • 当执行一条 LDREX 指令后,下一条立马跟着就是 STREX,那么他将会被执行
  • 如果第一条 LDREX 指令后又跟着其他的 STR 指令或者某些中断,那么接在这些代码之后的 STREX 就会被驳回!

LDREX/STREX 的工作原理:

  1. 执行 LDREX 后,在处理器内部标注一段地址,地址一般从 R0 开始
  2. 紧接着执行 STREX,若其存储区地址落在标注地址内,那么就清除该标记

端模式

CM3 虽然同时支持小端模式和大端模式,但是推荐直接使用小端
CM3 使用的是“字节不变大端”

CM3 中,均在复位时确定使用哪种端模式,且运行时不得更改


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

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

相关文章

Vue3.0极速入门- 目录和文件说明

目录结构 以下文件均为npm create helloworld自动生成的文件目录结构 目录截图 目录说明 目录/文件说明node_modulesnpm 加载的项目依赖模块src这里是我们要开发的目录,基本上要做的事情都在这个目录里assets放置一些图片,如logo等。componentsvue组件…

LAMP配置与应用

目录 一、LAMP架构的组成 1、WEB资源类型 2、LAMP架构的组成 二、编译安装LAMP 编译安装apache 1、环境准备 2、导入apache相关压缩安装包,然后安装编译环境 3、解压软件包,并移动apr包与apr-util包到安装目录中,并切换到http解压出…

【Java并发】聊聊对象内存布局和syn锁升级过程

对象存储解析:一个空Object对象到底占据多少内存? 对象内存布局 Mark Word占用8字节,类型指针占用8个字节,对象头占用16个字节。 好了,我们来看一下一个Object对占用多少空间, 因为java默认是开启压缩…

前端需要理解的设计模式知识

设计模式的原则:1. 单一职责原则(一个对象或方法只做一件事) 2. 最少知识原则(尽可能少的实体或对象间互相作用) 3. 开放封闭原则(软件实体具有可扩展且不可修改) 设计模式是通过代码设计经验总…

【八股】2023秋招八股复习笔记4(MySQL Redis等)

文章目录 目录1、MySQLmysql索引实现mysql索引优化mysql索引失效的情况mysql 千万数据优化mysql 事务隔离级别 & 实现原理mysql MVCC版本链(undo log)mysql数据同步机制 & 主从复制 (binlog)mysql 日志&数据恢复&…

腾讯云服务器地域和可用区详细介绍_选择攻略

腾讯云服务器地域有什么区别?怎么选择比较好?地域选择就近原则,距离地域越近网络延迟越低,速度越快。关于地域的选择还有很多因素,地域节点选择还要考虑到网络延迟速度方面、内网连接、是否需要备案、不同地域价格因素…

量化QAT QLoRA GPTQ

模型量化的思路可以分为PTQ(Post-Training Quantization,训练后量化)和QAT(Quantization Aware Training,在量化过程中进行梯度反传更新权重,例如QLoRA),GPTQ是一种PTQ的思路。 QAT…

spring整合mybatis教程(详细易懂)

一、引言 1、Spring整合MyBatis的目的是? 将两个框架结合起来,以实现更好的开发体验和效果。Spring提供了一种轻量级的容器和依赖注入的机制,可以简化应用程序的配置和管理。而MyBatis是一个优秀的持久层框架,可以方便地进行数据…

【面试题】MVC、MVP与MVVM模式是什么?

MVC模式 MVC是应用最广泛的软件架构之一,一般MVC分为: Model( 模型 )、Controller( 控制器 )、View( 视图 )。 这主要是基于分层的目的,让彼此的职责分开。View 一般…

自启动遇到某个节点或者某种环境变量问题导致启动失败

前言:此次记录无人车自启动过程遇到的问题。为了让ROS无人车能够实现飞控进行室外自主航线的问题,将飞控发布的PWM转为ROS无人车对应的速度。为了确保无人车启动后能够使用遥控器控制无人车,所以需要开机自启动。 硬件: 1、star…

飞书小程序开发

1.tt.showModal后跳转页面 跳转路径要为绝对路径,相对路径跳转无响应。 2.手机息屏后将不再进入onload()生命周期,直接进入onshow()生命周期。 onLoad()在页面初始化的时候触发,一个页面只调用一次。 onShow()在切入前台时就会触发&#x…

详解预处理

全文目录 前言预定义符号#define 定义标识符常量#define 定义宏#define 替换规则# 宏参数转换字符串## 宏参数拼接带有副作用的宏参数 宏与函数的对比#undef 移出宏定义命令行定义条件编译#include 文件包含头文件的包含方式头文件的重复包含 前言 前面我们学习了程序的编译和…