一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

朱老師物聯(lián)網(wǎng)大講堂 ? 2024-04-13 08:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、關(guān)鍵步驟

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

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

01

預(yù)處理

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

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

02

編譯

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

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

03

匯編

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

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

04

鏈接

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

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

05

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

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

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

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

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

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

01

預(yù)處理

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

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

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

02

編譯

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

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

這條命令將預(yù)處理過(guò)的文件編譯成匯編代碼,.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鏈接器,這條命令將一個(gè)或多個(gè)目標(biāo)文件鏈接成一個(gè)完整的二進(jìn)制可執(zhí)行文件 program

05

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

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

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

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

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

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

另外,對(duì)于某些單片機(jī),你可以使用特定的IDE提供的編譯按鈕來(lái)自動(dòng)完成這些步驟,而無(wú)需手動(dòng)執(zhí)行每個(gè)命令。這些IDE將這些步驟封裝起來(lái),從而提供給用戶(hù)一個(gè)簡(jiǎn)化的流程。

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

    關(guān)注

    6067

    文章

    44992

    瀏覽量

    650460
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

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

    關(guān)注

    0

    文章

    679

    瀏覽量

    33990
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

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

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

    教你一招如何分辨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

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

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

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

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

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

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

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

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

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

    手機(jī)屏幕油膩還滿(mǎn)是手印?教你一招,立馬干凈亮閃閃
    的頭像 發(fā)表于 08-27 17:26 ?6996次閱讀

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

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

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

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

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

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

    keil如何生成bin文件

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

    hex文件如何查看原c語(yǔ)言代碼

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