0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一招掌握C語言代碼如何變成bin文件?

朱老師物聯(lián)網(wǎng)大講堂 ? 2024-04-13 08:10 ? 次閱讀

一、關(guān)鍵步驟

單片機(jī)的源代碼轉(zhuǎn)換成二進(jìn)制文件(bin文件)的過程涉及幾個關(guān)鍵步驟,這些步驟是編譯過程中的標(biāo)準(zhǔn)組成部分,主要包括以下步驟:預(yù)處理、編譯、匯編、鏈接、二進(jìn)制轉(zhuǎn)換。

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

01

預(yù)處理

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

這是編譯過程的第一步。預(yù)處理器采取預(yù)處理指令,處理諸如宏定義(#define)、條件編譯(#ifdef, #ifndef, #endif)等。此步驟的輸出是擴(kuò)展的源代碼,包含所有頭文件和宏展開的結(jié)果。

02

編譯

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

在這一步,編譯器將預(yù)處理后的源代碼轉(zhuǎn)換為匯編代碼。編譯器首先進(jìn)行詞法分析、語法分析和語義分析,生成抽象語法樹(AST),然后將AST轉(zhuǎn)換為目標(biāo)機(jī)器的匯編指令。這一步是編譯過程中最復(fù)雜的部分,它包括優(yōu)化代碼以提高效率。

03

匯編

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

匯編器將編譯步驟產(chǎn)生的匯編代碼轉(zhuǎn)換為機(jī)器代碼。每一條匯編指令都對應(yīng)一條機(jī)器指令。匯編結(jié)果是一系列的機(jī)器指令,通常被存儲在一個目標(biāo)文件(如ELF格式)中。

04

鏈接

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

鏈接器的作用是將一個或多個目標(biāo)文件合并成一個單一的可執(zhí)行文件。在這一步中,還會解決外部引用,即將所有模塊對外部函數(shù)和變量的引用與其定義關(guān)聯(lián)起來。如果你的單片機(jī)項(xiàng)目中包含了多個源文件或者使用了外部庫,鏈接器會將它們與你的主程序合并為一個完整的程序。

05

二進(jìn)制轉(zhuǎn)換

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

最后,根據(jù)需要,可將鏈接器輸出的可執(zhí)行文件轉(zhuǎn)換為純二進(jìn)制格式(bin文件)。這是一個可選步驟,具體取決于目標(biāo)系統(tǒng)和開發(fā)環(huán)境。某些開發(fā)環(huán)境在鏈接階段直接生成bin文件,而其他環(huán)境可能會生成hex文件或其他格式的文件,需要使用專門的工具將這些文件轉(zhuǎn)換為bin格式。

這個過程可能會有些許差異,具體取決于使用的編譯器和開發(fā)環(huán)境。例如,在使用ARM單片機(jī)和Keil開發(fā)環(huán)境時(shí),整個流程可能會稍有不同,但基本原理是相同的。

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

對于單片機(jī)代碼的編譯過程,不同的編譯器和工具鏈有不同的指令或命令。以下是一個通用的示例,這些步驟在使用GNU工具鏈(比如GNU Compiler Collection, GCC)時(shí)的對應(yīng)命令。

01

預(yù)處理

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

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

這條命令將執(zhí)行預(yù)處理操作,.c 是你的源代碼文件,.i 是處理過的源代碼文件。

02

編譯

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

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

這條命令將預(yù)處理過的文件編譯成匯編代碼,.s 是生成的匯編代碼文件。

03

匯編

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

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

as 是GNU匯編器,這條命令將匯編代碼轉(zhuǎn)換為目標(biāo)代碼(機(jī)器代碼),.o 是目標(biāo)文件。

04

鏈接

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

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

ld 是GNU鏈接器,這條命令將一個或多個目標(biāo)文件鏈接成一個完整的二進(jìn)制可執(zhí)行文件 program。

05

二進(jìn)制轉(zhuǎn)換

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

假設(shè)我們使用的是ARM體系結(jié)構(gòu),可能會使用 objcopy 工具來從鏈接后的可執(zhí)行文件生成純二進(jìn)制文件:

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

在這里,program 是鏈接器生成的可執(zhí)行文件,而 program.bin 是生成的純二進(jìn)制文件。

請注意,以上命令是在命令行環(huán)境中使用的,并且是基于GCC工具鏈。如果你使用的是其他編譯器或集成開發(fā)環(huán)境(IDE),比如Keil、IAR或MPLAB等,步驟會相似,但是具體的命令或操作會有所不同。IDE通常提供圖形界面和按鈕來執(zhí)行這些操作,而不需要手動輸入命令。

另外,對于某些單片機(jī),你可以使用特定的IDE提供的編譯按鈕來自動完成這些步驟,而無需手動執(zhí)行每個命令。這些IDE將這些步驟封裝起來,從而提供給用戶一個簡化的流程。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6030

    文章

    44489

    瀏覽量

    631989
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7594

    瀏覽量

    135862
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    648

    瀏覽量

    32775
收藏 人收藏

    評論

    相關(guān)推薦

    C語言變成可執(zhí)行文件的四大步驟

    C語言變成最終的可執(zhí)行文件,需要經(jīng)過四步。
    發(fā)表于 10-18 10:37 ?5380次閱讀

    教你一招如何分辨PCB板層數(shù)

    教你一招如何分辨PCB板層數(shù)
    發(fā)表于 04-23 06:36

    教你一招如何去實(shí)現(xiàn)傅立葉變換算法?

    教你一招如何去實(shí)現(xiàn)傅立葉變換算法?
    發(fā)表于 04-30 06:05

    教你一招怎樣去選擇合適的CPLD

    CPLD有哪些優(yōu)點(diǎn)?教你一招怎樣去選擇合適的CPLD
    發(fā)表于 05-06 09:48

    教你一招如何去選擇射頻濾波器?

    教你一招如何去選擇射頻濾波器?
    發(fā)表于 05-28 07:05

    筆記本硬盤保養(yǎng)15(一招都馬虎不得)

    筆記本硬盤保養(yǎng)15(一招都馬虎不得) 硬盤保養(yǎng)也是門學(xué)問  如今快節(jié)奏的工作造就了部分“拆硬盤”的人,小編所說的“拆硬盤
    發(fā)表于 01-21 15:28 ?1021次閱讀

    巧解任何電腦的開機(jī)密碼(小小一招就搞定)

    巧解任何電腦的開機(jī)密碼(小小一招就搞定) 小小一招巧解任何電腦的開機(jī)密碼,無需任何工具,無需放電 任
    發(fā)表于 02-25 10:57 ?778次閱讀

    圖片轉(zhuǎn)C語言工具bin2c.exe

    電子發(fā)燒友網(wǎng)站提供《圖片轉(zhuǎn)C語言工具bin2c.exe.rar》資料免費(fèi)下載
    發(fā)表于 06-05 09:00 ?22次下載

    如何一招辨別iPhone X山寨機(jī)

    隨著iPhone X上市后的大賣,大波的山寨機(jī)也是洶涌而來。iPhone X是怎樣被步步山寨的?今天小編就帶你了解下怎么一招辨別真假。
    發(fā)表于 12-13 09:44 ?1.3w次閱讀

    一招讓手機(jī)屏立馬干凈

    手機(jī)屏幕油膩還滿是手?。拷棠?b class='flag-5'>一招,立馬干凈亮閃閃
    的頭像 發(fā)表于 08-27 17:26 ?4408次閱讀

    C語言的源代碼文件和目標(biāo)文件與可執(zhí)行文件的詳細(xì)介紹

    1、源代碼文件 存放程序代碼文件,即我們編輯代碼文件,稱為源
    的頭像 發(fā)表于 02-18 11:52 ?8476次閱讀

    BIN或.ASM文件轉(zhuǎn)換成C文件常見步驟

    足夠的了解。 通常的操作都是: 第步:先進(jìn)行解密,提供二進(jìn)制代碼BIN文件。 第二步:將BIN文件
    的頭像 發(fā)表于 12-07 10:29 ?9797次閱讀

    bin文件轉(zhuǎn)C語言可以做嗎?

    說實(shí)話,在我的認(rèn)知里,bin文件轉(zhuǎn)C語言是不可能的,即便能轉(zhuǎn),也是那種非常簡單的程序,比如:點(diǎn)燈。
    的頭像 發(fā)表于 08-17 09:04 ?1831次閱讀
    <b class='flag-5'>bin</b><b class='flag-5'>文件</b>轉(zhuǎn)<b class='flag-5'>C</b><b class='flag-5'>語言</b>可以做嗎?

    keil如何生成bin文件

    Keil是種集成開發(fā)環(huán)境(IDE),專為ARM架構(gòu)的嵌入式系統(tǒng)開發(fā)而設(shè)計(jì)。在Keil中生成bin文件是將代碼編譯并轉(zhuǎn)換為可執(zhí)行文件的過程。
    的頭像 發(fā)表于 12-15 13:43 ?1.1w次閱讀

    hex文件如何查看原c語言代碼

    是處理器可以直接執(zhí)行的指令,而 C 語言代碼則是人類可讀的高級編程語言代碼。 然而,如果你想要從 .hex
    的頭像 發(fā)表于 09-02 10:37 ?1192次閱讀