STM32(二十四)MDK编译过程以及文件类型全解

一、MDK编译过程:

二、程序的组成、存储与运行

  1、CODE、RO、RW、ZI Data域及堆栈空间

  • Code:即代码域,它指的是编译器生成的机器指令,这些内容被存储到ROM区
  • RO-data: Read Only data,即只读数据域,被存储在ROM区,因而程序不能修改其内容。例如C语言中const 关键字定义的.变量就是典型的RO-data。
  • RW-data: Read Write data,即可读写数据域,它指初始化为“非0值”的可读写数据,程序刚运行时,这些数据具有非0的初始值,且运行的时候它们会常驻在RAM区,因而应用程序可以修改其内容。例如C语言中使用定义的全局变量,且定义时赋予“非0值"给该变量进行初始化。
  • ZI-data: Zero Initialie data,即0初始化数据,它指初始化为“0值”的可读写数据域,它与RW-data 的区别是程序刚运行时这些数据初始值全都为0,而后续运行过程与RW-data的性质- -样,它们也常驻在RAM区,因而应用程序可以更改其内容。例如C语言中使用定义的全局变量,且定义时赋予“0值"给该变量进行初始化(若定义该变量时没有赋予初始值,编译器会把它当ZI-data来对待,初始化为0);
  • Zl-data的栈空间(Stack)及堆空间(Heap):在C语言中,函数内部定义的局部变量属于栈空间,进入函数的时候从向栈空间申请内存给局部变量,退出时释放局部变量,归还内存空间。而使用malloc动态分配的变量属于堆空间。在程序中的栈空间和堆空间都是属于ZI-data区域的,这些空间都会被初始值化为0值。编译器给出的ZI-data占用的空间值中包含了堆栈的大小(经实际测试,若程序中完全没有使用malloc动态申请堆空间,编译器会优化,不把堆空间计算在内)。

 

 

 2、MDK工程的文件类型

 

 

 3、hex. bin及axf文件的区别与联系。

bin、hex 及axf文件都包含了指令代码,但它们的信息丰富程度是不一样的。

  •  bin文件是最直接的代码映像,它记录的内容就是要存储到FLASH的二进制数据(机器码本质_上就是二进制数据),在FLASH中是什么形式它就是什么形式,没有任何辅助信息,包括大小端格式也没有,因此下载器需要有针对芯片FLASH平台的辅助文件才能正常下载(- -般下载器程序会有匹配的这些信息);
  • hex文件是一种使用十六进制符号表示的代码记录,记录了代码应该存储到FLASH的哪个地址,下 载器可以根据这些信息辅助下载;
  • axf文件在前文已经解释,它不仅包含代码数据,还包含了工程的各种信息,因此它也是三个文件中最大的。
原文地址:https://www.cnblogs.com/yuanqiangfei/p/14465443.html