[应用相关] STM32代码生成FLASH和RAM占用计算方法

[复制链接]
 楼主| 磨砂 发表于 2025-7-11 11:47 | 显示全部楼层 |阅读模式
编译结果里面的几个数据的意义:
Code:表示程序所占用 FLASH 的大小(FLASH)。
RO-data:即 Read Only-data,表示程序定义的常量(FLASH)。
RW-data:即 Read Write-data,表示已被初始化的变量(RAM)
ZI-data:即 Zero Init-data,表示未被初始化的变量(RAM

计算公式:
flash = Code + RO-data + RW-data
ram = RW-data + ZI-data

另种计算方法

arm-none-eabi-size solar_charging_control.elf

text                 data                 bss                 dec                 hex                         filename

13336             112                  1944              15392             3c20                        control.elf

text(代码段): 存放程序的可执行指令代码。编译器将源代码编译生成的机器指令存储在这个段中。
data(数据段): 存放程序中已经初始化的全局变量和静态变量。这些变量在程序编译时就已经确定了初始值。
bss(Block Started by Symbol): 存放未初始化的全局变量和静态变量。这些变量在程序加载时会被系统自动清零。
dec(十进制数): 是 text、data、bss 三个段的总和,表示程序在Flash中占用的总空间大小。

hex(十六进制): 和dec值相同

计算公式:
flash = text + data + bss

也可以通过

28385686cd03febcf6.png

查看

6412686cd03b71ae2.png

1、栈区

栈区(stack):由编译器自动分配和释放,存放函数的参数值、局部变量的值等,其操作方式类似于数据结构中的栈。

这个_Min_Stack_Size就是栈大小,0x00000400就是代表有1K(0x400/1024)的大小。

参数,全局变量,局部变量,数组。

2、堆区
堆区(heap):一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。分配方式类似于数据结构中的链表。

_Min_Heap_Size是堆大小

malloc()函数动态分配的内存就属于堆的空间。

3、不使用malloc就把堆区设置为0

_Min_Heap_Size = 0x000; /* required amount of heap */

_Min_Stack_Size = 0x200; /* required amount of stack */
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/g313105910/article/details/148400918

小小蚂蚁举千斤 发表于 2025-7-28 23:08 | 显示全部楼层
STM32代码生成FLASH和RAM占用计算方法非常不错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

112

主题

4334

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部

112

主题

4334

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部