RT-Thread的内存分布
编译器会将程序分为好几类,分别存储在不同的存储区中
linking...
Program Size: Code=48008 RO-data=5660 RW-data=604 ZI-data=2124
After Build - User command \#1: fromelf --bin.\\build\\rtthread-stm32.axf--output rtthread.bin
".\\build\\rtthread-stm32.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed: 00:00:07
Code--------------代码段 RO-data----------(Read Only)只读数据段,存放程序中定义的常量(const,字符串等) RW-data----------(Read Write)读写数据段,存放程序中已经初始化为非0的全局变量 ZI-data------------(Zero Initialize)0数据段,存放程序中未初始化或者初始化为0的变量
观察.map文件发现: RO Size包括Code以及Ro-data,表示程序占用Flash的大小 RW Size包括RW-data以及ZI-data,表示运行时占用RAM的大小 ROM Size包括Code,RO-data以及RW-data,表示烧写程序所占用的Flash空间大小
烧录时将将RO段和RW段((代码,只读数据),读写数据)全都烧到Flash里面, STM32上电启动之后默认从Flash启动,启动之后会将RW段中的RW-data(即已经初始化的全局变量)拉进RAM中,不会搬移RO段的代码和只读数据。最后将根据编译器给出的ZI地址和大小分配出ZI段,再将这块RAM清零。
这样CPU可以从Flash执行代码,从内存中读写RW段ZI段的数据
|