编译过程简介

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

图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。

图2 编译工程时的编译提示

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

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

图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。

图4 编译后Output 及Listing 文件夹中的内容

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

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

电堂科技​c.51diantang.com

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

  1. MDK 的编译过程及文件类型全解

    出处:MDK 的编译过程及文件类型全解 MDK 的编译过程及文件类型全解 ------(在arm9的开发中,这些东西都是我们自己搞定的,但是在windows上,IDE帮我们做好了,了解这些对深入开发是 ...

  2. MDK的编译过程及文件类型全解——(二)

    前言: 为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长. 本文转载自:第48章 MDK的编译过程及文件类型全解-零死角玩转STM32 ...

  3. 第48章 MDK的编译过程及文件类型全解—零死角玩转STM32-F429系列

    第48章     MDK的编译过程及文件类型全解 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.co ...

  4. MDK的编译过程及文件类型全解——(一)

    前言: 为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长. 本文转载自:第48章 MDK的编译过程及文件类型全解-零死角玩转STM32 ...

  5. 多文件目录下makefile文件递归执行编译所有c文件 很不错

    下面是网上找到的,思路很不错,当然也无法满足所有的需求,我执行又修改了一套.解决了下面的方法存在的问题:每次编译都是全编译的问题,解决思路是.o文件需要跟编译的makefile文件同目录. 首先说说本 ...

  6. 成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入

    成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入 目录 解决问题 解决思路 解决方法 解决问题 .pyx格式文件,在window ...

  7. Java的class文件批量反编译成Java文件

    Java的class文件批量反编译成java文件 Class文件是java文件编译后产生的一个文件,class文件便于在软件上运行,但是我们无法阅读中间的程序,所以我们需要将class文件转换成jav ...

  8. 第48章 MDK的编译过程及文件类型全解

    Frm: http://www.cnblogs.com/firege/p/5806134.html 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教 ...

  9. MDK编译过程和文件详解

    MDK编译过程 编译生成的不同的文件将在后面进行详细说明 1) 编译:MDK软件使用的编译器是armcc和armasm,它们根据每个c/c++和汇编文件编译成对应的以".o"为后缀 ...

  10. c语言将源文件拷贝到目的文件,C语言编译过程 简介和详解

    C编译的整个过程很复杂,大致可以分为以下四个阶段: 1)预处理阶段在该阶段主要完成对源代码的预处理工作,主要包括对宏定义指令,头文件包含指令,预定义指令和特殊字符的处理,如对宏定义的替换以及文件头中所 ...

最新文章

  1. LAMP 架构深度优化记录
  2. 如何解决failed to push some refs to git
  3. 排队问题解题思路_高考文科数学是最“拉分”的!6种题型分析与10大解题方法...
  4. 1.socket编程:socket编程,网络字节序,函数介绍,IP地址转换函数,sockaddr数据结构,网络套接字函数,socket相关函数,TCP server和client
  5. CentOS 7安装GitLab、汉化、配置邮件发送
  6. 政府数据集中异地备份概述
  7. C#中开发之Socket网络编程TCP/IP层次模型、端口及报文等探讨
  8. [数据结构]Map和Set
  9. [css] 用css画一个太阳
  10. 计算机技术要求单科成绩吗,软考考试合格标准怎样确定?单科成绩是否保留?
  11. 2021年新高考八省联考成绩查询福建,八省联考福建什么时候出成绩 2021八省联考福建成绩查询...
  12. 2019届[月考01-03]高三理科数学试题参考答案
  13. Q107:Mac系统下GDB对PBRT-V3进行debug
  14. mysql单列索引和多列索引_MySQL索引使用说明(单列索引和多列索引)
  15. 一个互联网电话公司对全球商务有什么样的影响?
  16. SRTP RFC4568
  17. SQL 同比环比增长率计算
  18. 世纪互联评测至强5500 总结云平台经验
  19. Java输入1~12之间的整数,显示该月份的英语单词及这个月属第几季度。
  20. 用数字万用表测量三极管的方法

热门文章

  1. DelayQueue初学
  2. 2017 年,最热开源静态网站生成器 TOP 20 揭晓!
  3. linux 内存碎片信息查看
  4. 数字虚拟人metahuman,苹果手机做动作捕捉
  5. 【微信小程序】解决Echarts在微信小程序tab切换时的显示问题
  6. UI——day15.H5和小程序的设计
  7. u盘写保护怎么才能真正去掉
  8. Delayed Project
  9. java杯子换水_水壶问题(向水壶中倒z升水) Water and Jug Problem
  10. linux make menuconfig快速查找配置项