有关STM32烧录文件大小、keil中计算Flash与SRAM大小相关知识

1.文件类型与STM32中Flash大小、SRAM大小、Hex文件大小、Bin文件大小的关系

        axf文件、hex文件和bin文件都可以运行在stm32上,并且都存储了编译器根据源代码存储的机器码,在不同的应用场合中有区别;

  • axf文件:包含调试信息,编译默认生成的文件,不仅包含数据代码还包含调试信息,在MDK进行Debug就是这个文件;
  • hex文件:包含地址信息;
  • bin文件:最直接的代码映像;
  • Flash大小与Hex文件大小没有关系;

        一般串口烧录时,直接烧录的是Hex文件,所以可能误以为Flash大小和Hex文件大小有关系,实际完全没有关系,真正烧进去的是二进制文件,就是在Hex文件中包含的Bin文件数据

  • Hex文件大小和Bin文件大小没有决定性的关系

        Hex文件内容很多,其中包含Bin文件的二进制内容,很多软件都能把Hex直接转换成Bin文件,实际烧进去的是一堆Bin文件,而不是Hex

  • Flash大小和Bin文件大小相关

        Bin文件就是完全的程序文件了,也就是最直接的代码映像,可以说Bin文件大小就是Flash大小,ST-Link连接进去查看的Flash程序内容就是 和 PC用WinHex打开的内容一样

2-Keil中计算Flash与SRAM大小的分布情况

Code:表示所要执行的代码,程序中所有的函数都位于此处;

RO-data: 表示只读数据,程序中所定义的全局常量数据和字符串都位于此处;

RW-data:表示已初始化的读写数据,程序中定义并且初始化的全局变量和静态变量位于此处;

ZI-data:表示未初始化的读写数据,程序中定义了但没有初始化的全局变量和静态变量位于此处;

下载到Flash程序大小: Code + RO-data + RW-data;

运行在SRAM的数据大小是: RW-data + ZI-data

在工程的编译文件夹里找到.map文件拉到最后可直接看程序大小

3-VSCode-GCC中计算Flash与SRAM大小的分布情况

  • text段(Code segment/Text segment) -> Flash

        代码段 存放程序执行的代码 在程序运行前大小就已经确定, 并且该区域属性通常为只读(某些架构也允许代码段可写, 即允许修改程序), 并且包含只读常量;

RO-Data + Code

  • data段(Data Segment) -> SRAM

        数据段, 通常存放程序中已初始化的全局变量的一块内存区域(初始化非0), 数据段属于静态内存分配

RW-Data

  • bss段(Block Started by Symbol Segment) -> Flash

        用来存放程序中未初始化(或初始化为0)的全局变量的一块区域, bss段属于静态内存分配

未手动初始化的数据(初始化非0), 并不应该给此段数据分配空间, 只是记录数据所需空间的大小, bss段的大小从可执行文件中

  • 大小计算

RAM占用大小 = 堆区 + 栈区 + bss

Flash占用大小 = text + data

  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
烧录Keil5之前,需要建立一个关于STM32的工程并添加文件,然后编译生成hex文件。Hex文件是一种可以烧写到单片机并被执行的文件格式。在Hex文件,每行以冒号开头,内容全为16进制码。第一行的内容可以分为多个字段,其0x02表示数据长度。烧录Keil5的具体步骤如下: 1. 在Keil5创建一个新的工程并选择适合的STM32单片机系列。 2. 添加需要的源文件、头文件和库文件到工程。 3. 进行编译,确保工程没有错误和警告。 4. 编译成功后,Keil5会生成一个hex文件。可以通过分析hex文件来获取一些信息,比如程序各部分的大小。 5. 准备好烧录工具,将hex文件烧写到STM32单片机。 总结起来,烧录Keil5的步骤包括建立工程、添加文件、编译生成hex文件以及将hex文件烧录STM32单片机。在烧录过程,需要根据具体的硬件和工具来进行相应的配置和操作。参考的内容可以提供更多关于烧录Keil5的详细信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [关于使用keil5软件进行stm32的简单嵌入编程](https://blog.csdn.net/asdf_qfvr/article/details/120579498)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小白菜123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值