STM32F4编程手册学习2_内存模型

1. 内存映射

MCU将资源映射到一段固定的4GB可寻址内存上,如下图所示。

内存映射将内存分为几块区域,每一块区域都有一个定义的内存类型,一些区域还有一些附加的内存类型。

内存类型有以下几种:

  • Normal
    处理器可以为了性能而对访问该区域的任务进行重排序。

  • Device
    处理器保证访问该内存的任务与其他访问Device或者Stronly-ordered内存的任务相对顺序不变。

  • Stronly-ordered
    处理器保证该访问该内存的任务与所有其他任务保持相对顺序。

  • Execute Never(XN)
    处理器避免对此的指令访问,任何试图从该区域预取指令的操作都将造成一个内存管理错误异常。

2. 内存访问顺序

对于大多数由显示内存指令访问指令所引起的内存访问而言,系统不会保证访问完成的顺序与程序中顺序一致。如果程序的执行依赖于两次内存完成的顺序,那么应该使用内存屏障指令,来保证内存访问按照程序代码中的顺序执行。

然而,内存系统可以保证,一些对Device 和Strongly-ordered内存的访问操作按顺序执行。如下表所示,其中A1、A2分别表示两次内存访问操作指令,“<” 表示A1先与A2执行,“-” 表示两者顺序不确定。

内存访问屏障有DMB, DSB, ISB三种,如下表所示

指令 描述
DMB Data Memory Barrier, 保证此指令之前的内存任务执行完毕,才会执行后续的内存任务。
DSB Data Synchronization Barrier, 保证此指令之前的内存任务执行完毕,之后才会执行后续指令。
DMB Instruction Synchronization Barrier, 保证所有已经完成的内存任务可以被后续指令识别。

下面是几个使用内存屏障的例子:

  • 向量表
    如果程序改变了向量表某一项的入口,之后使能了对应异常。那么在使能异常之前,需要使用DMB指令,以保证异常进入的是新的异常向量表。

  • Self-Modifying code
    如果程序包含Self-Modifying code代码,在代码修改后需要立即需要使用ISB指令,以保证后续指令使用了新的程序代码。

  • memory map switching
    如果系统支持内存映射变换机制,那么需要在内存映射变化后使用DSB,以保证后续程序使用更新后的内存映射。

  • 动态异常优先级更改
    如果在一个异常正在执行或者就绪状态时,该异常优先级更改了,应该使用DSB指令,以保证改变生效。

访问Strongly-ordered 内存不需要使用DMB指令。

3. 内存访问行为

内存地址 内存区域 内存类型 XN 描述
0x00000000-0x1FFFFFFF Code Normal - 程序代码的可执行区域,数据也可以放在这里
0x20000000-0x3FFFFFFF SRAM Normal - 数据的可执行区域 代码也可以放在这里, 该区域包括位带及位带别名区
0x40000000-0x5FFFFFFF Peripheral Device XN 外设区,该区域包括位带及位带别名区
0x60000000-0x9FFFFFFF External RAM Normal - 数据外部存储区
0xA0000000-0xDFFFFFFF External Device Device XN 外部设备区
0xED000000-0xED0FFFFF Private Peripheral BUS Stronly-ordered XN 此区域报刊NVIC、系统定时器、系统控制块
0xED100000-0xFFFFFFFF Memory mapped peripherals Device XN 这个区域包含STM32标准外设

Code, SRAM, exteral RAM都可以保存程序,建议程序指令保存在Code区域。

3.1 bit-band 位带

位带是指将位带别名区的一个字映射到位带区域的一个位上,如下图所示。位带区域占据SRAM和外设区的最低1M字节的地方。

向别名区写一个字更新了位带区的一个对应的位。别名区一个字的bit[0]决定了对应位的值, 而其他位bit[31;1]则对位带区没有什么影响。所以写0xFF跟写0x01对位带区的影响是一样的。

本文图表引用自《PM0214: STM32F3, STM32F4 and STM32L4 Series Cortex®-M4 programming manual》

本文参考ST官方文档《PM0214: STM32F3, STM32F4 and STM32L4 Series Cortex®-M4 programming manual》

STM32F4编程手册学习2_内存模型的更多相关文章

  1. STM32F4 编程手册学习1_编程模型

    STM32F4 programming manual_1 1. 处理器模式与特权等级 处理器模式分为以下两种: 线程模式: 用来执行应用软件: 处理器从reset出来时,进入线程模式: CONTROL ...

  2. 《深入理解 Java 虚拟机》学习 -- Java 内存模型

    <深入理解 Java 虚拟机>学习 -- Java 内存模型 1. 区别 这里要和 JVM 内存模型区分开来: JVM 内存模型是指 JVM 内存分区 Java 内存模型(JMM)是指一种 ...

  3. JVM学习笔记——内存模型篇

    JVM学习笔记--内存模型篇 在本系列内容中我们会对JVM做一个系统的学习,本片将会介绍JVM的内存模型部分 我们会分为以下几部分进行介绍: 内存模型 乐观锁与悲观锁 synchronized优化 内 ...

  4. Java并发编程:JMM(Java内存模型)和volatile

    1. 并发编程的3个概念 并发编程时,要想并发程序正确地执行,必须要保证原子性.可见性和有序性.只要有一个没有被保证,就有可能会导致程序运行不正确. 1.1. 原子性 原子性:即一个或多个操作要么全部 ...

  5. Java并发编程:JMM (Java内存模型) 以及与volatile关键字详解

    目录 计算机系统的一致性 Java内存模型 内存模型的3个重要特征 原子性 可见性 有序性 指令重排序 volatile关键字 保证可见性和防止指令重排 不能保证原子性 计算机系统的一致性 在现代计算 ...

  6. JAVA并发编程的艺术 JMM内存模型

    锁的升级和对比 java1.6为了减少获得锁和释放锁带来的性能消耗,引入了"偏向锁"和"轻量级锁". 偏向锁 偏向锁为了解决大部分情况下只有一个线程持有锁的情况 ...

  7. Java虚拟机学习 - 体系结构 内存模型

    一:Java技术体系模块图 二:JVM内存区域模型 1.方法区 也称"永久代” .“非堆”, 它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共享的内存区域.默认最小值为16MB,最 ...

  8. Java虚拟机学习 - 体系结构 内存模型(1)

    一:Java技术体系模块图 二:JVM内存区域模型 1.方法区 也称"永久代" ."非堆",  它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共享的内 ...

  9. JVM学习--(二)内存模型、可见性、指令重排序

    我们将根据JVM的内存模型探索java当中变量的可见性以及不同的java指令在并发时可能发生的指令重排序的情况. 内存模型 首先我们思考一下一个java线程要向另外一个线程进行通信,应该怎么做,我们再 ...

随机推荐

  1. Web—06-JavaScript

    JavaScript介绍 JavaScript是运行在浏览器端的脚步语言,JavaScript主要解决的是前端与用户交互的问题,包括使用交互与数据交互. JavaScript是浏览器解释执行的,前端脚 ...

  2. mysql千万级数据库插入速度和读取速度的调整

    mysql上百万数据读取和插入更新一般没什么问题,但上千万后速度会很慢,如何调整配置,提高效率.如下: 1.尽量将数据一次性写入DataFile和减少数据库的checkpoint操作,调整如下参数: ...

  3. MVC进行多文件上传

    用mvc做多文件的上传和保存到本地,大致流程就是,前台通过form表单提交多文件,Controller接受到文件流,将文件流保存到本地 然后将保存地址 存到数据库中. 将文件通过from提交 < ...

  4. multiprocessing中进程池,线程池的使用

    multiprocessing 多进程基本使用 示例代码1 import time import random from multiprocessing import Process def run( ...

  5. opencv3 学习四 - 图像减色

    程序如下 #include "opencv2/opencv.hpp" using namespace cv; int main() { // 灰度图 Mat original = ...

  6. JAVA基础 - 自定义异常类

    自定义异常类,代码还不是很明白,先存着以后参考. package week6; class ScoreException extends Exception { private static fina ...

  7. 笔记-sql语句

    笔记-sql语句 1.      sql语句基础 虽然经常使用sql语句,但没有一个整体式的文档,整理了一下. 1.1.    select foundation: select <colnum ...

  8. BZOJ1432_Function_KEY

    题目传送门 找规律. 画一个像这样的图: 不同颜色为不同层,因为函数图像可对称,所以只考虑K<=N/2的情况. 最小为min(K,N-K+1)*2. N=1时特殊考虑,答案为1. code: # ...

  9. 北京Uber优步司机奖励政策(11月2日~11月8日)

    用户组:优步北京人民优步A组(适用于11月2日-11月8日) 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不 ...

  10. 北京Uber优步司机奖励政策(10月26日~11月1日)

    用户组:优步北京人民优步A组(适用于10月26日-11月1日) 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/ ...