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

news2024/9/26 3:30:01

目录

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

存储系统


存储器映射

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

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

相关文章

SAP MTS案例教程STO公司间采购前台操作

目录 本章介绍 2 STO主数据操作 3 新增公司间物料(部件公司) 3 新增公司间供应商(整机公司) 9 新增公司间客户(部件公司) 13 STO 计划MRP相关操作 17 新增STO公司间采购订单(整机公司) 17 部件公司计划…

uvm_sequence_library 中添加sequence类型的两种方式

uvm_sequence_library是从uvm_sequence扩展而来的,它是一个容纳了一系列其它sequences类型的容器,在启动时,它会根据模式从这系列sequences中选择并执行它们。如果处于UVM_SEQ_LIB_RAND模式,它的select_rand属性将会随机并作为选择…

集合框架-(Collection/Map)

1.单列集合 1.1基础概要 集合中存储的是对象的地址信息,想要输出对象的信息,需要在具体的类中重写toString()方法 Collection代表单列集合,每个元素数据只包含一个值 List集合:添加的元素可以是有序、可…

时序预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机时间序列预测(多指标评价)

时序预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机时间序列预测(多指标评价) 目录 时序预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机时间序列预测(多指标评价)效果一览基本描述程序设计参考资料 效果一览 基本描述 MATLAB实现DBN-SVM深度置信网络结合支持向量机…

11. 盛最多水的容器(c++题解)

11. 盛最多水的容器(c题解) 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大…

【linux进程概念】

目录: 冯诺依曼体系结构操作系统进程 基本概念描述进程-PCBtask_struct-PCB的一种task_ struct内容分类组织进程查看进程 fork()函数 冯诺依曼体系结构 我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺…

[C++] STL_vector 迭代器失效问题

文章目录 1、前言2、情况一:底层空间改变的操作3、情况二:指定位置元素的删除操作4、g编译器对迭代器失效检测4.1 扩容4.2 erase删除任意位置(非尾删)4.3 erase尾删 5、总结 1、前言 **迭代器的主要作用就是让算法能够不用关心底…

【业务功能篇85】微服务-springcloud-Nginx-反向代理-网关

Nginx域名 1.hosts文件 在c:/window/system32/drivers/etc/hosts文件,我们在这个文件中添加 192.168.56.100 msb.mall.com注意如果是没有操作权限,那么点击该文件右击属性,去掉只读属性即可 通过这个域名访问到Nginx服务 2.Nginx的方向代…

[GDOUCTF 2023]EZ WEB

进入环境有一个点击标签,点击 后触发提示,flag就在附近 习惯性查看源码,得到路径提示 访问后,得到源码,源码中存在三个路由,前两个都是GET方式,已经访问过了,最后一个PUT是什么请求…

MQ-整体回顾

one 异步、解耦、削峰 two 深入理解核心编程模型及消息应用场景 主要通过多了QUEUE进行交换消息 虚拟机的消息是不能发到另外虚拟机的Queue上的 生产者创建connection建立连接通过connection声明channel信道通过channel声明队列声明好队列后发送消息消费者拿到connectio…

SketchBook软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 SketchBook是一款由Autodesk公司开发的绘画和绘图软件,它适用于各种操作系统和平台,如Windows、macOS、iOS和Android等。 SketchBook是一款专业的绘图软件,旨在满足各种绘画和绘图需求。它提…

无涯教程-聚类算法 - K-Means

K-均值聚类算法计算质心并进行迭代,直到找到最佳质心为止,它假定群集的数目是已知的,它也称为扁平聚类算法。通过算法从数据中识别出的簇数以K均值中的" K"表示。 在该算法中,将数据点分配给群集,以使数据点…

Linux page migration源码分析

目录 概述 __unmap_and_move函数 step1: Lock the page to be migrated step2: Insure that writeback is complete. step3: Lock the new page that we want to move to. step4: All the page table references to the page are converted to migration entries. st…

Python学习笔记:正则表达式、逻辑运算符、lamda、二叉树遍历规则、类的判断

1.正则表达式如何写? 序号实例说明1.匹配任何字符(除换行符以外)2\d等效于[0-9],匹配数字3\D等效于[^0-9],匹配非数字4\s等效于[\t\r\n\f],匹配空格字符5\S等效于[^\t\r\n\f],匹配非空格字符6\w等效于[A-Za-z0-9]&…

推荐系统峰会:图与推荐系统

文章目录 图机器学习在京东视频召回中的应用提纲背景图召回架构图业务特色图召回总结 图算法在蚂蚁集团营销推荐场景的应用目录背景基金推荐长尾推荐 图模型在百度推荐系统的实践与思考目录图背景介绍常用算法Feed流图模型演进历程 GNN跨域推荐在微信业务上的应用目录GNN跨域遇…

Linux操作系统--常用指令(文件权限操作类)

(1).文件属性 Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。 为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。在Linux中我们可以使用ll或者ls -l命令来显示一个文件的属性以及文件所属的用…

【Git】在idea中多分支开发如何——合并分支、处理冲突

博主简介:22级计算机科学与技术本科生一枚🌸博主主页:是瑶瑶子啦每日一言🌼: “人间总有一两风,填我十万八千梦” 目录 一、背景二、具体操作 一、背景 我当前开发的分支——hfy我想将subject分支的最新代码拉取&…

最新Nmap入门技术

点击星标,即时接收最新推文 本文选自《web安全攻防渗透测试实战指南(第2版)》 点击图片五折购书 Nmap详解 Nmap(Network Mapper,网络映射器)是一款开放源代码的网络探测和安全审核工具。它被设计用来快速扫…

如何卸载mysql?windows版

查看电脑是否安装过mysql: cmd输入:mysql -V 卸载第一步: 停止Mysql服务:winR 打开运行,输入 services.msc 点击"确定"调出系统服务。 这个进程名为安装MySQL的进程名,是可以更改的,默认为MySQL80 打开控制…

独家采访WizardLM团队,详解WizardCoder/Math超越GPT4/ChatGPT的RLEIF算法

最新消息! 在Meta AI发布Code Llama后仅两天的时间,WizardLM 团队基于该模型及其最新的对齐算法训练的WizardCoder-Python 34B V1.0在权威代码生成评测榜单HumanEval上即达到了惊人的 73.2% pass1分值,同时超越了Claude-2(71.2%&…