keil工程变异代码的时候,会有如下输出信息
code:代码机器编译后生成的一系列指令,永远只放在flsah,内存ram不会存在;
RO-data:只读常量,永远只放在flash内,存ram不会存在;;
RW-data:可读写,初始化不为0的全局变量、静态变量;比较特殊会在flash也会在ram中存放;
ZI-data:可读写,初始化为0的变量,永远只放在内存ram;
烧录程序后,占用flash空间 = code + R0-data + RW-data
程序运行,占用RAM = RW-data+ZI-data + 具体运行时的堆栈使用情况
为什么RW-data在flash又在内存ram,因为它是初始化不为0的数据,有数值,掉电需要保存,所以会先存着flash,运行时会从flash搬运到ram中提高速度。
编译后的bin文件大小(基本上)= code + R0-data + RW-data
为什么会乱?或者记不住?
1、因为ZI-data和bss对应(初始化为0的全局变量),RW-data和data对应(初始化不为0的全局变量);ZI-data+RW-data叫全局区静态区;
2、如下图,下面这种情况经常和STM32的情况混在一起。
以下注意flash和ram的排布,ram从RWsection开始
https://download.csdn.net/blog/column/2436835/108681761
盗用C语言-内存分布(STM32内存分析)_stm32 ram内存分布-CSDN博客的图片
总结:我没有去研究到底是不是我上面说的这样,感觉大概率是的。够用,不想折腾。