zoukankan      html  css  js  c++  java
  • 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文件在前文已经解释,它不仅包含代码数据,还包含了工程的各种信息,因此它也是三个文件中最大的。
  • 相关阅读:
    Java Logger 使用总结
    java中用Eclipse打JAR包,包含外部JAR
    安装e(fx)clipse到Eclipse (JavaFX工具)
    肾亏怎么办 下面给你支支招
    汇编cmp比较指令详解
    eclipse安装插件报错Unable to read repository at
    Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法
    Java开发桌面程序学习(二)————fxml布局与控件学习
    JavaFX入门(二):JavaFX和FXML
    Apache Tomcat 文件包含漏洞 (CVE20201938) 复现
  • 原文地址:https://www.cnblogs.com/yuanqiangfei/p/14465443.html
Copyright © 2011-2022 走看看