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文件在前文已经解释,它不仅包含代码数据,还包含了工程的各种信息,因此它也是三个文件中最大的。

 

posted @   轻轻的吻  阅读(621)  评论(1编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2019-03-01 单词记忆
点击右上角即可分享
微信分享提示