针对单片机flash和ram的分析(stm32)
单片机型号(STM32H750IBKx) STM32H 系列
问题描述:
- 在裸机开发中, 当代码量越来越大的时候,生成的需要烧写的二进制文件也越来越大, 片内的flash之后128KB,超过这个数之后下载到flash中可能就会出错
- 代码量大的同时,运行的时候, CPU将固件读到RAM,然后文件的大小如果超出了RAM的大小, 程序运行也会出错
主要搞明白:
1. 如何查看片内flash和ram大小
2. 代码编译运行时对代码中的一些变量和方法如何存储,运行时如何开辟内存空间
3. 生成的各种二进制文件的区别(.hex, .bin, .axf)以及烧写方式
如何查看片内flash和ram大小
- 官方文档和手册:
根据官方文档给出的 FLASH 的大小为 128KB, SRAM 大小为 1024KB - 通过芯片手册查看在文档一列中, datasheet查看
对RAM的描述
对ram的分类和大小说明特别明确:
ITCM: 专用于指令传输的总线, 对时间要求特别严格的代码,可以放在 ITCM中执行, 有效的提高运行速度
DTCM: 专用于数据传输的总线, 对反复需要操做的数据可以放在 DTCM中执行
ITCM和DTCM是直连CPU的,比读写片上RAM要快,可以达到 CPU Cache 的速度(ICache缓存指令, DCache缓存数据),这个主要针对sram
对flash的描述
对flash的描述很模糊, 在stm32程序中都是有自举程序
的,一般大小占用就有 128KB
了
在STM32H7系列当中对flash的描述是这样子
在STM32H7
系列当中, flash用户大小是2MB, 另外128*2作为系统的本身flash程序, 而我们自己的程序在flash当中一般是以最低地址开启计算的 0x08000000
:
生成的各种二进制文件的区别(.hex, .bin, .axf, .elf)以及烧写方式
首先,在编译完代码之后,在编译文件的目录下有 .map文件,其中包含了数据的大小
Code(inc .data):代码数据 RO-data:指只读数据,除了内联数据之外的常量数据,短字符串等,存在flash中 RW-data:指可读写、已初始化的变量数据,存在flash中,运行时会去读到arm当中 ZI-data:指未初始化的变量数据,运行时在ram当中 Debug :显示调试数据占用了多少字节,例如,调试输入节以及符号和字符串。 Object Totals :显示链接到一起以生成映像的对象占用了多少字节。 (incl. Generated):链接器会生成的映像内容,例如,交互操作中间代码。 如果 Object Totals 行包含此类型的数据,则会显示在该行中。本例中共有 1016 字节的 RO 数据,其中32字节是链接器生成的 RO 数据。 (incl. Padding) :链接器根据需要插入填充,以强制字节对齐。 1、Code、Ro-data:位于FLASH中; 2、RW-data、ZI-data:位于RAM中; 3、RW-data已初始化的数据会存储在Flash中,上电会从FLASH搬移至RAM; 4、Total ROM Size 就是下载到flash中的程序大小,就是生成.bin的大小
文件hex bin axf elf区别
需要注意的时 axf 和 elf 文件都包含了最终只烧写到flash上实际文件大小, 比如在keil调试烧写的是 .axf, 这里面一般包含了调试信息, 文件比较大(5MB), 而下载到flash中,并不是直接把axf文件写进去,而是把axf中包含的 .bin(Code + RO Data + RW Data,大约40KB, .map文件中有详细的说明) 烧写进去
.bin和.hex 如何生成
https://www.cnblogs.com/han-guang-xue/p/16525292.html
烧写方式
.bin
和.hex
: 使用jlink, https://blog.csdn.net/weixin_45612967/article/details/102818623
.elf
和.axf
:烧写:直接使用keil,这个属于可调式的文件
本文来自博客园踩坑狭,作者:韩若明瞳,转载请注明原文链接:https://www.cnblogs.com/han-guang-xue/p/16978108.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比