Keil5中堆栈相关知识

网络上搜集整理的资料,非原创!

Keil编译信息中的:Program Size:Code=XX  RO-data=XX   RW-data=XX   ZI-data=XX

其中:

Code: 存储到flash[Rom]中的程序代码。(文本段)

RO-data:(Read Only)只读常量的大小,如const型。(数据段)

RW-data:(Read Write) 初始化了可读写变量的大小。即已初始化为非零的全局变量。 (数据段)

ZI-data:(Zero Initialize) 没有初始化或初始化为0的可读写的变量的大小(不会被算做代码里,因为不会被初始化)。  (BBS段)

ROM(Flash) size = Code+RO-data+RW-data;

RAM size = RW-data+ZI-data

如果一个变量被初始化为0,则该变量的处理方法与未初始化变量一样放在ZI区法域。即ARM C程序中,所有的示初始化变量都会被自动初始化为0。

总结:

1、C中的指令以及常量被编译后是RO类型数据

2、C中的未被始化或初始化为0的变量编译后是ZI类型数据。

3、C中已被初始化成非0的值的变量编译后是RW类型数据

4、以上变量指全局变量,局部变量是以上程序中在栈中分配。

ROM指:NAND Flash,Nor Flash

RAM指:PSRAM,SDRAM,DDRAM

Keil IDE的编译信息在工程文件夹的xx.map文件中,STM32的RAM分区从0x0200 0000开始,静态区、堆、栈。

所有的全局变量,包括静态变量之类的,全部存储在静态存储区。然后是堆区(如没用到malloc,则没有该区),之后是栈区,栈在程序中存储局部变量。

堆栈增长方向

堆在使用时会从低地址往上加,而栈是从__initial_sp开始往下减。 

你可能感兴趣的:(硬件开发)