名词解析
| 字段 | 全称 | 含义 | 存储位置 | 说明 |
| Code | Code | 代码 | Flash | 程序代码(函数,语句)的大小 |
| RO-data | Read Only data | 只读数据 | Flash | 存储在Flash中的常量,比如const变量,字符串字面量"hello" |
| RW-data | Read Write data | 已初始化的可读写数据 | Flash->RAM | 在定义时被显式初始化的全局变量和静态变量。上电后,启动代码会将这些数据从Flash拷贝到RAM中。 |
| ZI-data |
Zero Initialized data | 未初始化或初始化为0的数据 | RAM | 未初始化的全局/静态变量,或被初始化为0的全局/静态变量。启动代码会在main()函数执行前将这片内存区域清零。 |
.text:对应Code段,这里可以查看每个函数占用了多少字节。
.constdata:对应RO-data段,查看字符串和常量的大小。
.data:对应RW-data段,查看已初始化的全局/静态变量。
.bss:对应ZI-data段,查看未初始化的全局/静态变量。.bss段在运行时会被初始化为0。
如何计算Flash和RAM的实际占用?
-
Flash占用 (下载到芯片的文件大小)
-
Flash = Code + RO-data + RW-data-
示例:
6320 + 336 + 44 = 6700字节 -
为什么包括
RW-data?因为初始值需要保存在Flash中,上电后再拷贝到RAM。
-
-
RAM占用 (运行时所消耗的内存)
-
RAM = RW-data + ZI-data-
示例:
44 + 1024 = 1068字节 -
RW-data和ZI-data在运行时都存在于RAM中。
-
内存溢出判断:
如果Code + RO-data + RW-data > 芯片Flash大小,会提示错误。如果RW-data + ZI-data > 芯片RAM大小,程序运行时行为不可预测( hardfault 等异常)。

529

被折叠的 条评论
为什么被折叠?



