广告

原创 了解STM32F4xx的Memory

2017-7-18 11:38 555 2 2 分类: 处理器与DSP

要了解单片机,当然得了解它的memory。如果是ARM核是STM32F4xx的大脑,外设是STM32F4xx的手脚,bus是它的血管,那么memory就是它的记忆了(貌似不是什么贴切的比喻,哈哈哈哈)。STM32F4xx的程序memory、数据memory、寄存器和IO ports都组织在同一个4G地址空间内。


从STM32F4xx的器件手册里,我们能够看到它的存储空间被分成8个Block,每个Block有512个字节。Flash在第一个Block里,从0x0800 0000开始;SRAM在第二个Block里,地址从0x2000 0000开始;外设寄存器在第三个Block里,地址从0x4000 0000开始。


使用Keil编译STM32F4xx项目,如果成功,会看到如下信息:

compiling Common.c...

linking...

Program Size: Code=99276 RO-data=1560 RW-data=2056 ZI-data=64216

".\OBJ\hello.axf" - 0 Error(s), 3 Warning(s).

Build Time Elapsed: 00:00:48


Code是代码占用的空间;RO-data是Read Only只读常量的大小,如const型;RW-data是Read Write初始化了的可读写变量的大小;ZI-data(Zero Initialize)是没有初始化的可读写变量的大小。烧写在Flash中的被占用空间是Code + RO-data + RW-data,运行在芯片内部的是RW-data + ZI-data。


Falsh从0x0800 0000开始,共1M,即结束地址是0x080F FFFF。

SRAM从0x2000 0000开始,共128K,即结束地址是0x2001 FFFF,包含SRAM1和SRAM2。


在主机(Linux)上安装交叉工具链arm-none-eabi-gcc,使用readelf工具查看axf文件内容:

$ /opt/stm32.arm.bin/arm-none-eabi-readelf -a hello.axf

Screenshot from 2017-07-15 18-09-27


从这段信息可以看出,此axf文件是32位、小端存储、可执行。AXF(ARM Executable File)是ARM芯片使用的文件格式,它除了包含bin代码外,还包括了输出给调试器的调试信息,例如每行C语言所对应的源文件行号等。

Screenshot from 2017-07-15 18-09-46


如果出现疑似堆栈溢出、内存不够的情形,可以通过readelf方法查看一下生成的可执行文件,观察其Flash和SRAM的分配情况,做到心中有数。


广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
DiracFatCat 2018-09-05 12:14
【博客大赛】卡尔曼滤波学习笔记(11)从位置估计速度
卡尔曼滤波器,不仅仅是一个低通滤波器,否则也不会持续发展50年。 示例:桑先生需要测试高速列车的性能。测试的目的是判断列车在直线上能否保持80m/s的速度。速度和位置每0.1秒测量一次,...
DiracFatCat 2018-08-31 19:32
【博客大赛】卡尔曼滤波学习笔记(10)一个简单的示例
《Kalman Filtering: Theory and Practice Using MATLAB》第三章,看不懂,暂时略过。《Kalman Filtering: Theory and Pract...
DiracFatCat 2018-07-19 15:09
对sed命令的练习
sed是流编辑器。它每次处理一个输入,因此很有效率。官方手册:https://www.gnu.org/software/sed/manual/sed.html学习Linux命令,当然要阅读官方手册,所...
DiracFatCat 2018-06-19 15:10
【博客大赛】卡尔曼滤波学习笔记(八)可观测性和可控制性 ...
可观测性是指,在给定模型的情况下,动力学系统的状态是否由它的输入输出唯一确定。可观测性是系统模型的特征。如果传感器矩阵H是可逆的,则本系统可观测,因为有:如果传感器矩阵H某些时候是不可逆的,则本系统仍...
DiracFatCat 2018-06-19 10:56
【博客大赛】卡尔曼滤波学习笔记(七)Z变换
如果我们仅仅对离散线性系统感兴趣,那么就使用下面这个表达式:如果u是常量,那么可以写成:为了简化表达式,我们可以将上面写成:离散线性时不变系统的Φ求解,可以使用Z变换。(* 由于本人已经忘记了Z变换的...
DiracFatCat 2018-06-19 10:54
【博客大赛】卡尔曼滤波学习笔记(六)拉普拉斯变换
对于线性时变/时不变系统,求解Φ(t)有多种方式,拉普拉斯变换是其中一种。(* 由于本人已经忘记了拉普拉斯变换的内容,因此本节待续。)...
我要评论
0
2
广告
关闭 热点推荐上一条 /1 下一条