0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

朱老师物联网大讲堂 2024-04-13 08:10 次阅读

一、关键步骤

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

3f9950ea-f92a-11ee-9118-92fbcf53809c.png

01

预处理

3fe0ee00-f92a-11ee-9118-92fbcf53809c.png

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

02

编译

3fe0ee00-f92a-11ee-9118-92fbcf53809c.png

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

03

汇编

3fe0ee00-f92a-11ee-9118-92fbcf53809c.png

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

04

链接

3fe0ee00-f92a-11ee-9118-92fbcf53809c.png

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

05

二进制转换

3fe0ee00-f92a-11ee-9118-92fbcf53809c.png

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

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

3f8f8286-f92a-11ee-9118-92fbcf53809c.png二、通用示例

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

01

预处理

3fe0ee00-f92a-11ee-9118-92fbcf53809c.png

400bb054-f92a-11ee-9118-92fbcf53809c.png

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

02

编译

3fe0ee00-f92a-11ee-9118-92fbcf53809c.png

401ce2a2-f92a-11ee-9118-92fbcf53809c.png

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

03

汇编

3fe0ee00-f92a-11ee-9118-92fbcf53809c.png

4032282e-f92a-11ee-9118-92fbcf53809c.png

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

04

链接

3fe0ee00-f92a-11ee-9118-92fbcf53809c.png

40426bee-f92a-11ee-9118-92fbcf53809c.png

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

05

二进制转换

3fe0ee00-f92a-11ee-9118-92fbcf53809c.png

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

40522016-f92a-11ee-9118-92fbcf53809c.png

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

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

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

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

    关注

    6020

    文章

    44349

    浏览量

    628084
  • C语言
    +关注

    关注

    180

    文章

    7574

    浏览量

    133901
  • 编译
    +关注

    关注

    0

    文章

    645

    浏览量

    32659
收藏 人收藏

    评论

    相关推荐

    C语言变成可执行文件的四大步骤

    C语言变成最终的可执行文件,需要经过四步。
    发表于 10-18 10:37 5106次阅读

    教你一招如何分辨PCB板层数

    教你一招如何分辨PCB板层数
    发表于 04-23 06:36

    教你一招如何去实现傅立叶变换算法?

    教你一招如何去实现傅立叶变换算法?
    发表于 04-30 06:05

    教你一招怎样去选择合适的CPLD

    CPLD有哪些优点?教你一招怎样去选择合适的CPLD
    发表于 05-06 09:48

    教你一招如何去选择射频滤波器?

    教你一招如何去选择射频滤波器?
    发表于 05-28 07:05

    笔记本硬盘保养15(一招都马虎不得)

    笔记本硬盘保养15(一招都马虎不得) 硬盘保养也是门学问  如今快节奏的工作造就了部分“拆硬盘”的人,小编所说的“拆硬盘
    发表于 01-21 15:28 1006次阅读

    巧解任何电脑的开机密码(小小一招就搞定)

    巧解任何电脑的开机密码(小小一招就搞定) 小小一招巧解任何电脑的开机密码,无需任何工具,无需放电 任
    发表于 02-25 10:57 770次阅读

    图片转C语言工具bin2c.exe

    电子发烧友网站提供《图片转C语言工具bin2c.exe.rar》资料免费下载
    发表于 06-05 09:00 22次下载

    如何一招辨别iPhone X山寨机

    随着iPhone X上市后的大卖,大波的山寨机也是汹涌而来。iPhone X是怎样被步步山寨的?今天小编就带你了解下怎么一招辨别真假。
    发表于 12-13 09:44 1.3w次阅读

    一招让手机屏立马干净

    手机屏幕油腻还满是手印?教你一招,立马干净亮闪闪
    的头像 发表于 08-27 17:26 4345次阅读

    C语言的源代码文件和目标文件与可执行文件的详细介绍

    1、源代码文件 存放程序代码文件,即我们编辑代码文件,称为源
    的头像 发表于 02-18 11:52 8315次阅读

    BIN或.ASM文件转换成C文件常见步骤

    足够的了解。 通常的操作都是: 第步:先进行解密,提供二进制代码BIN文件。 第二步:将BIN文件
    的头像 发表于 12-07 10:29 9453次阅读

    bin文件C语言可以做吗?

    说实话,在我的认知里,bin文件C语言是不可能的,即便能转,也是那种非常简单的程序,比如:点灯。
    的头像 发表于 08-17 09:04 1686次阅读
    <b class='flag-5'>bin</b><b class='flag-5'>文件</b>转<b class='flag-5'>C</b><b class='flag-5'>语言</b>可以做吗?

    keil如何生成bin文件

    Keil是种集成开发环境(IDE),专为ARM架构的嵌入式系统开发而设计。在Keil中生成bin文件是将代码编译并转换为可执行文件的过程。
    的头像 发表于 12-15 13:43 9566次阅读

    hex文件如何查看原c语言代码

    是处理器可以直接执行的指令,而 C 语言代码则是人类可读的高级编程语言代码。 然而,如果你想要从 .hex
    的头像 发表于 09-02 10:37 246次阅读