tag 标签: STM32F4xx

相关博文
  • 热度 17
    2017-7-18 11:38
    1728 次阅读|
    0 个评论
    要了解单片机,当然得了解它的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 从这段信息可以看出,此axf文件是32位、小端存储、可执行。AXF(ARM Executable File)是ARM芯片使用的文件格式,它除了包含bin代码外,还包括了输出给调试器的调试信息,例如每行C语言所对应的源文件行号等。 如果出现疑似堆栈溢出、内存不够的情形,可以通过readelf方法查看一下生成的可执行文件,观察其Flash和SRAM的分配情况,做到心中有数。
相关资源