一招掌握C语言代码如何变成bin文件?

描述

 

一、关键步骤

将单片机的源代码转换成二进制文件(bin文件)的过程涉及几个关键步骤,这些步骤是编译过程中的标准组成部分,主要包括以下步骤:预处理、编译、汇编、链接、二进制转换。

C语言

01

预处理
 

C语言

这是编译过程的第一步。预处理器采取预处理指令,处理诸如宏定义(#define)、条件编译(#ifdef, #ifndef, #endif)等。此步骤的输出是扩展的源代码,包含所有头文件和宏展开的结果。

02

编译

C语言

在这一步,编译器将预处理后的源代码转换为汇编代码。编译器首先进行词法分析、语法分析和语义分析,生成抽象语法树(AST),然后将AST转换为目标机器的汇编指令。这一步是编译过程中最复杂的部分,它包括优化代码以提高效率。

03

汇编

C语言

汇编器将编译步骤产生的汇编代码转换为机器代码。每一条汇编指令都对应一条机器指令。汇编结果是一系列的机器指令,通常被存储在一个目标文件(如ELF格式)中。

04

链接
 

C语言

链接器的作用是将一个或多个目标文件合并成一个单一的可执行文件。在这一步中,还会解决外部引用,即将所有模块对外部函数和变量的引用与其定义关联起来。如果你的单片机项目中包含了多个源文件或者使用了外部库,链接器会将它们与你的主程序合并为一个完整的程序。

05

二进制转换

C语言

最后,根据需要,可将链接器输出的可执行文件转换为纯二进制格式(bin文件)。这是一个可选步骤,具体取决于目标系统和开发环境。某些开发环境在链接阶段直接生成bin文件,而其他环境可能会生成hex文件或其他格式的文件,需要使用专门的工具将这些文件转换为bin格式。

这个过程可能会有些许差异,具体取决于使用的编译器和开发环境。例如,在使用ARM单片机和Keil开发环境时,整个流程可能会稍有不同,但基本原理是相同的。

C语言二、通用示例

对于单片机代码的编译过程,不同的编译器和工具链有不同的指令或命令。以下是一个通用的示例,这些步骤在使用GNU工具链(比如GNU Compiler Collection, GCC)时的对应命令。

01

预处理

C语言

C语言

这条命令将执行预处理操作,.c 是你的源代码文件,.i 是处理过的源代码文件。

02

编译
 

C语言

C语言

这条命令将预处理过的文件编译成汇编代码,.s 是生成的汇编代码文件。

03

汇编

C语言

C语言

as 是GNU汇编器,这条命令将汇编代码转换为目标代码(机器代码),.o 是目标文件。

04

链接

C语言

C语言

ld 是GNU链接器,这条命令将一个或多个目标文件链接成一个完整的二进制可执行文件 program。

05

二进制转换

C语言

假设我们使用的是ARM体系结构,可能会使用 objcopy 工具来从链接后的可执行文件生成纯二进制文件:

C语言

在这里,program 是链接器生成的可执行文件,而 program.bin 是生成的纯二进制文件。

请注意,以上命令是在命令行环境中使用的,并且是基于GCC工具链。如果你使用的是其他编译器或集成开发环境(IDE),比如Keil、IAR或MPLAB等,步骤会相似,但是具体的命令或操作会有所不同。IDE通常提供图形界面和按钮来执行这些操作,而不需要手动输入命令。

另外,对于某些单片机,你可以使用特定的IDE提供的编译按钮来自动完成这些步骤,而无需手动执行每个命令。这些IDE将这些步骤封装起来,从而提供给用户一个简化的流程。

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分