Keil-MDK编译解析

最近在学习MDK的编译,在这个过程中有一些收获,所以写了此博客和大家交流分享,如有错误,欢迎指正!

本文实验使用的是Autochip 的AC7801,主要参考了秉火的MDK的编译过程

1.C程序编译解析

    C编程的基本策略是用程序把源代码文件转换为可执行文件(其中包含可直接运行的机器语言代码),典型的C实现是通过编译和链接这两个步骤实现的。编译器把源代码转换为中间代码,链接器把中间代码和其他代码合并,生成可执行文件。
   编译器首先将源代码转化为机器语言代码,并把结果放在目标代码文件(.obj文件、简称目标文件)中,虽然目标文件包含机器语言代码,但是并不能直接运行该文件。因为目标文件中存储的是编译器翻译的源代码,这还不是一个完整的程序。目标代码文件缺少启动代码(startup code),启动代码充当程序和操作系统之间的接口。目标代码还缺少库函数,几乎所有的C程序都要使用C标准库中的函数。
   连接器的作用就是把你编写的目标代码、系统的标准启动代码和库代码这3部分合并为一个文件,即可执行文件,对于库代码,链接器只会把程序中要用到的库函数代码提取出来。
目标文件和可执行文件都是由机器语言指令组成的,然而,目标文件中只包含编译器为你编写的代码翻译的机器语言代码,可执行文件中,还包含了你编写程序中使用的库函数和启动代码的机器代码。
在这里插入图片描述

2.MDK编译过程

在单片机的平台上,除了编译、链接生成可执行程序外,还需要将可执行程序转换为 bin 或者 hex 文件:

编译: MDK使用的编译器是armcc和armasm,它们根据每个C/C++和汇编源文件成对应的以“ .o ” 为后缀名的对象文件(Object Code, 也称为目标文件)&#x

  • 11
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值