.axf文件_MDK 的编译过程及文件类型全解(一)

编译过程简介

首先简单了解下MDK 的编译过程,它与其它编译器的工作过程是类似的,该过程见图1。

88321b13d44309517d4a25682f7ca4bf.png
图1 MDK 编译过程

编译过程生成的不同文件将在后面的小节详细说明,此处先抓住主要流程来理解。

(1) 编译,MDK 软件使用的编译器是armcc 和armasm,它们根据每个c/c++和汇编源文件编译成对应的以“.o”为后缀名的对象文件(Object Code,也称目标文件),其内容主要是从源文件编译得到的机器码,包含了代码、数据以及调试使用的信息;

(2) 链接,链接器armlink 把各个.o 文件及库文件链接成一个映像文件“.axf”或“.elf”;

(3) 格式转换,一般来说Windows 或Linux 系统使用链接器直接生成可执行映像文件elf后,内核根据该文件的信息加载后,就可以运行程序了,但在单片机平台上,需要把该文件的内容加载到芯片上,所以还需要对链接器生成的elf 映像文件利用格式转换器fromelf 转换成“.bin”或“.hex”文件,交给下载器下载到芯片的FLASH 或ROM 中。

具体工程中的编译过程

下面我们打开 “多彩流水灯”的工程,以它为例进行讲解,其它工程的编译过程也是一样的,只是文件有差异。打开工程后,点击MDK 的“rebuild”按钮,它会重新构建整个工程,构建的过程会在MDK下方的“Build Output”窗口输出提示信息,见图2。

8241889e807151d2a6256ee7f1fc098a.png
图2 编译工程时的编译提示

构建工程的提示输出主要分6个部分,说明如下:

(1) 提示信息的第一部分说明构建过程调用的编译器。图中的编译器名字是“V5.06(build20)”,后面附带了该编译器所在的文件夹。在电脑上打开该路径,可看到该编译器包含图3 中的各个编译工具,如armar、armasm、armcc、armlink 及fromelf,后面四个工具已在图1 中已讲解,而armar 是用于把.o 文件打包成lib 文件的。

b44960a746a203afc3da83a417f6d6f6.png
图3 编译工具


(2) 使用armasm编译汇编文件。图中列出了编译startup 启动文件时的提示,编译后每个汇编源文件都对应有一个独立的.o 文件。

(3) 使用armcc 编译c/c++文件。图中列出了工程中所有的c/c++文件的提示,同样地,编译后每个c/c++源文件都对应有一个独立的.o 文件。

(4) 使用armlink 链接对象文件,根据程序的调用把各个.o 文件的内容链接起来,最后生成程序的axf 映像文件,并附带程序各个域大小的说明,包括Code、RO-data、RW-data及ZI-data 的大小。

(5) 使用fromelf 生成下载格式文件,它根据axf 映像文件转化成hex 文件,并列出编译过程出现的错误(Error)和警告(Warning)数量。

(6) 最后一段提示给出了整个构建过程消耗的时间。构建完成后,可在工程的“Output”及“Listing”目录下找到由以上过程生成的各种文件,见图4。

41f8e305ba81070f8c78873e1853e2d5.png
图4 编译后Output 及Listing 文件夹中的内容


可以看到,每个C 源文件都对应生成了.o、.d 及.crf 后缀的文件,还有一些额外的.dep、.hex、.axf、.htm、.lnp、.sct、.lst 及.map 文件。

点击链接观看更多相关课程

电堂科技​c.51diantang.com

979c0f5a3b378051d91b6516e6d27707.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值