MDK5—stm32程序的组成、存储与运行

发布时间 2023-04-23 14:33:36作者: codeSir

 

MDK编译完成后,程序显示由Code、RO-data、RW-data、ZI-Data段组成(栈空间(Stack)及堆空间(Heap))。

1、Code:代码域,它指的是编译器生成的机器指令,这些内容被存储在ROM区;

RO-data:Read Only data,只读数据域,它指程序中用到的只读数据,这些数据被存储在ROM区,因而程序不能修改其内容。例如C语言中const关键字定义的变量就是典型的RO-data。

 

2、RW-data:Read Write data,可读写数据域,它指初始化为“非0值”的可读写数据,程序刚运行时,这些数据具有非0的初始值,且运行的时候它们会常驻在RAM区,因而应用程序可以修改其内容。例如C语言中使用定义的全局变量,且定义时赋予“非0值”给该变量进行初始化。

 

3、ZI-data:Zero Initialie data,0初始化数据,它指初始化为“0值”的可读写数据域,它与RW-data的区别是程序刚运行时这些数据初始值全都为0,而后续运行过程与RW-data的性质一样,它们也常驻在RAM区,因而应用程序可以更改其内容。例如C语言中使用定义的全局变量,且定义时赋予“0值”给该变量进行初始化(若定义该变量时没有赋予初始值,编译器会把它当ZI-data来对待,初始化为0);

 

4、ZI-data的栈空间(Stack)及堆空间(Heap):属于ZI-data区域,会被初始值化为0值。编译器给出的ZI-data占用的空间值中包含了堆栈的大小(经实际测试,若程序中完全没有使用malloc动态申请堆空间,编译器会优化,不把堆空间计算在内)。可在startup_stm32f10x_hd.s文件修改其大小,但不得超过芯片的sRAM大小。

 

 程序在掉电和上电的运行状态下存储器的情况: