编译结果里面的几个数据的意义:
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

也可以通过

查看

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 */

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐