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

1. 内存映射

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

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

内存类型有以下几种:

Normal

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

Device

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

Stronly-ordered

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

Execute Never(XN)

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

2. 内存访问顺序

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

然而,内存系统可以保证,一些对Device 和Strongly-ordered内存的访问操作按顺序执行。如下表所示,其中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对位带区的影响是一样的。

内存模型 linux,内存模型 - STM32F4 编程手册学习_Linux编程_Linux公社-Linux系统门户网站...相关推荐

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

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

  2. 外网主机访问虚拟机下的Web服务器_服务器应用_Linux公社-Linux系统门户网站

    外网主机访问虚拟机下的Web服务器_服务器应用_Linux公社-Linux系统门户网站 之前在CentOS虚拟机上安装了LAMP,搭建起了自己的web服务器,具体流程见: http://www.lin ...

  3. 2440 linux文件写,添加yaffs2文件系统 - Linux2.6.39在S3C2440上的移植_Linux编程_Linux公社-Linux系统门户网站...

    1.主机环境:VMare下Ubuntu10.04 ,1G内存. 2.编译编译环境:arm-linux-gcc 3.开发板:Micro2440,2M nor flash,256M nand flash. ...

  4. 库卡六轴机器人编程手册_KUKA机器人编程手册 高级.pdf

    KUKA机器人编程手册 高级 Training KUKA Roboter GmbH 机器人编程 3 库卡系统软件 8 发布日期 : 22.12.2011 版本 : P3KSS8 Roboterprog ...

  5. 西门子840d高级编程手册_Sinumerik840D840Di810D高级编程手册.pdf

    Sinumerik840D840Di810D高级编程手册 编程说明 版本03.2004 SINUMERIK 840D/840Di/810D 工作准备部分 灵活的NC编程 1 子程序技术, 2 宏指令技 ...

  6. 怎样学好python编程-怎样学习python编程?

    什么是Python? 在过去的2017年里,Python开发者在全球快速增长,国内小伙伴学习 Python 的热情一路高涨.同时,PYPL发布7月编程语言指数榜,Python 在今年5月首次超越 Ja ...

  7. 学python编程_学习Python编程,我们应该如何学?学习内容包括哪些?

    点击蓝字"python教程"关注我们,一起学习成长哟! 我想可能很多网友和我有着相似的学习背景,学习Python会有以下的问题: 从零开始,不知道如何下手开始学? 被基本的数据结构 ...

  8. linux判断网卡是否挂载,检查网卡是否加载 - Linux服务器网卡驱动安装及故障排除_服务器应用_Linux公社-Linux系统门户网站...

    2.检查网卡是否加载: 驱动硬件是操作系统最基本的功能,操作系统通过各种驱动程序来驾驭硬件设备,和Windows系统不同Linux内核目前采用可加载的模块化设计(LKMs Loadable Kerne ...

  9. linux oracle流复制文件,【学习笔记】Oracle ASM linux dd命令复制asm中文件 操作磁盘或者分区...

    天萃荷净 使用dd复制asm中文件,随着数据库新版本的推广ASM肯定会越来越被重视,最近准备系统的学习下ASM,以备突发情况需要,这是asm深入学习笔记 1.查询ASM某个数据文件AU信息 SQL&g ...

最新文章

  1. Android高手速成
  2. zookeeper 分布式计数器
  3. C语言实现折半插入排序(Binary Insertion Sort)算法(附完整源码)
  4. 国内第一本项目管理的实践书籍——《IT项目管理那些事儿》
  5. thymeleaf if 条件判断
  6. win7连接共享打印机时安装驱动程序出现0x00000bcb错误【解决办法】
  7. LeetCode详细题解-Java版
  8. arduino无线下载
  9. 成都以前的计算机学校图片,成都计算机中职图片介绍
  10. Excel函数(4)日期、文本函数
  11. 喜忧参半的电子烟 究竟是不是一个靠谱的创业机会?
  12. 写作素材分类整理技巧分享
  13. Android 锁屏功能
  14. 【Wordpress主题】Sakuraio主题的使用与优化
  15. 文件上传数据库,并下载(包含删除,根据条线查询等功能)
  16. F2FS源码分析-1.6 [F2FS 元数据布局部分] Segment Summary Area-SSA结构
  17. 计算机音乐谱安娜的橱窗,钢琴谱 - 安娜的橱窗(2)
  18. OpenFeign日志
  19. Windows文件服务器文件审计,文件监控软件,File_System_Auditor2.53安装教程
  20. 准备做个舒米的专辑,回顾一下这位我最喜欢的车手

热门文章

  1. FMS关于代理共享对象
  2. Mac/Linux使用fcrackzip
  3. Android Multimedia框架总结(二十四)MediaMuxer实现手机屏幕录制成gif图
  4. 【Android架构GPS篇】之定位数据如何从GPS芯片到应用层
  5. Android系统信息获取 之六:网络连接状态信息获取
  6. web项目怎么打包上线_如何打包发布Web Application应用程序
  7. 软件测试 - V模型、W模型、H模型、X模型
  8. java8的stream特性_Java8新特性介绍:Stream API
  9. docker 删除包含关键字的镜像_Docker 架构及工作原理
  10. python编写鸡兔同笼程序设计_Python少儿编程:鸡兔同笼,涨知识了