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

您所在的位置:网站首页 flash舞台大小一般设置多大 有关STM32烧录文件大小、keil中计算Flash与SRAM大小相关知识

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

2024-07-10 17:43| 来源: 网络整理| 查看: 265

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3