在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

單片機編程中的可執(zhí)行文件鏈接

電子工程師 ? 來源:單片機匠人 ? 作者:黃忠老師 ? 2021-08-13 15:02 ? 次閱讀

在最開始人們編寫程序時,都將所有的代碼都寫在同一個源文件中,經(jīng)過長期的積累,程序可能包含了N多行的代碼,程序員維護起來非常困難。迫切地希望將程序源代碼分散到多個文件中,一個文件一個模塊,能夠更好地閱讀和維護程序,這個時候,鏈接器就閃亮登場了。

我們知道,數(shù)據(jù)是保存在存儲器中的,對于單片機來說,必須知道這些數(shù)據(jù)的地址才能使用。變量名、函數(shù)名等僅僅是地址的一種代名詞兒,旨在編程時更加方便地使用數(shù)據(jù),當源文件被編譯成可執(zhí)行文件后,這些標識符都不存在了,它們都被替換成了數(shù)據(jù)的地址。

任何程序的執(zhí)行,最終都要依靠計算機硬件來完成,單片機是大規(guī)模集成電路,它只認識高低兩個電平(電壓),假設高電平為 3.3V,用1表示,低電平為 0V,用0表示。也就是說,在單片機底層,只有 0 和 1 兩個二進制數(shù)字,這就是機器語言。

使用機器語言編程,十分繁瑣又耗時,并且很容易出錯。如果程序包含了多個源文件,就很可能會有跨文件的跳轉(zhuǎn)、在程序擁有多個模塊時會導致更加嚴重的問題。于是大神們發(fā)明了匯編語言,這相比機器語言來說是個很大的進步。匯編語言使用接近人類的各種標號來幫助記憶,比如用jmp表示跳轉(zhuǎn)指令,用func表示一個子程序(C語言中的函數(shù)就是一個子程序)的起始地址,標號的方法使得人們從具體的機器指令和二進制地址中解放出來。標號這個概念隨著匯編語言的普及被廣泛接受,它用來表示一個地址,這個地址可能是一段子程序的起始地址,也可以是一個變量的地址。

隨著軟件規(guī)模的日漸龐大,代碼量開始瘋長,匯編語言的缺點逐漸暴露出來。匯編雖然提供了多種標號,但它依然非常接近計算機硬件,程序員要考慮很多細節(jié)問題和邊界問題,而且不利于模塊化開發(fā),所以后來人們發(fā)明了C語言。C語言是比匯編更加高級的編程語言,極大地提高了開發(fā)效率,以加法為例,C語言只需要一條語句,匯編卻需要四五條。

單片機編程中,程序員通過會把很多功能分散到成許多個模塊中。這些模塊之間相互依賴又相互獨立,原則上每個模塊都可以單獨開發(fā)、編譯、測試,改變一個模塊中的代碼不需要編譯整個程序。在程序被分隔成多個模塊后,需要解決的一個重要問題是如何將這些模塊組合成一個單一的可執(zhí)行程序。在C語言中,模塊之間的依賴關(guān)系主要有兩種:一種是模塊間的函數(shù)調(diào)用,另外一種是模塊間的變量訪問。函數(shù)調(diào)用需要知道函數(shù)的首地址,變量訪問需要知道變量的地址,所以這兩種方式可以歸結(jié)為一種,那就是模塊間的符號引用。這種通過符號將多個模塊拼接為一個獨立的可執(zhí)行程序的過程就叫做鏈接(Linking)。

在一個STM32項目中,代碼被分為多個文件時,鏈接器可以鏈接ARM代碼、Thumb代碼、Thumb-2 代碼,并自動生成交互操作中間代碼,以便在需要時切換處理器狀態(tài)。鏈接器還可以在需要時自動生成內(nèi)聯(lián)中間代碼或長跳轉(zhuǎn)中間代碼,以擴展跳轉(zhuǎn)指令的范圍。

鏈接器還可以生成關(guān)于鏈接文件的調(diào)試和引用信息、生成靜態(tài)調(diào)用圖并列出堆棧的使用情況、控制輸出映像中符號表的內(nèi)容、顯示輸出中代碼和數(shù)據(jù)的大小。鏈接器針對下一次文件編譯提供反饋信息,提示編譯器有關(guān)未使用函數(shù)的情況。可以根據(jù)提示在后續(xù)編譯中將未使用的函數(shù)放置在各自的節(jié)中,以便鏈接器將來刪除這些函數(shù)。

使用鏈接器構(gòu)建可執(zhí)行映像時,鏈接器將解析輸入對象文件之間的符號引用,從庫中提取對象模塊來滿足還未滿足的符號引用的需要,根據(jù)屬性和名稱排序輸入節(jié),并將屬性和名稱相似的節(jié)合并為相鄰塊,刪除未使用節(jié),刪除重復的公共組和公共代碼、數(shù)據(jù)及調(diào)試節(jié),根據(jù)提供的分組和布局信息將對象片段組織為內(nèi)存區(qū),給可重定位值分配地址,最終生成可執(zhí)行映像。

責任編輯:haq

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

    關(guān)注

    6044

    文章

    44640

    瀏覽量

    639920
  • 計算機
    +關(guān)注

    關(guān)注

    19

    文章

    7565

    瀏覽量

    88872
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3645

    瀏覽量

    94194

原文標題:單片機生成可執(zhí)行文件之鏈接

文章出處:【微信號:CanaanTech,微信公眾號:嘉楠科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    labview打包可執(zhí)行文件后安裝出錯

    在 labview 寫程序時使用到了ni-imaqdx模塊,最終將其打包為可執(zhí)行文件和安裝包后,在其它電腦安裝后會提示ni-imaqdx軟件未激活,請問這是安裝環(huán)境沒有配置好嗎?
    發(fā)表于 12-17 19:23

    單片機編程語言有哪些選擇

    單片機(Microcontroller Unit,MCU)編程是指為單片機編寫程序的過程,這些程序控制單片機的行為和功能。單片機廣泛應用于嵌
    的頭像 發(fā)表于 11-01 14:13 ?1152次閱讀

    C語言生成可執(zhí)行二進制文件的具體過程

    C語言源碼到生成可執(zhí)行文件的過程通常包括預處理(Preprocessing)、編譯(Compilation)、匯編(Assembly)、鏈接(Linking)等多個步驟,每個步驟都有其特定的任務
    的頭像 發(fā)表于 10-21 14:30 ?786次閱讀
    C語言生成<b class='flag-5'>可執(zhí)行</b>二進制<b class='flag-5'>文件</b>的具體過程

    龍芯2K0300蜂鳥板試用報告

    :loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.3-1 二、試用步驟 將交叉編譯工具鏈導入到虛擬。 將試用軟件文件導入到虛擬
    發(fā)表于 09-13 18:00

    labview怎么生成可執(zhí)行文件

    生成可執(zhí)行文件(EXE)是LabVIEW程序開發(fā)的一個重要步驟,它允許用戶將LabVIEW項目打包成一個獨立的應用程序,便于在沒有安裝LabVIEW的計算機上運行。 1. 準備工作 在開始生成
    的頭像 發(fā)表于 09-04 17:07 ?1258次閱讀

    labview生成可執(zhí)行程序后vi都在同一路徑下嗎

    在LabVIEW,當您生成可執(zhí)行程序(exe文件)后,VI(虛擬儀器)并不直接以文件的形式存在于可執(zhí)行文件的同一物理路徑下。實際上,Lab
    的頭像 發(fā)表于 09-04 17:06 ?813次閱讀

    stm32單片機用什么軟件編程

    STM32單片機是一種廣泛應用于嵌入式系統(tǒng)領(lǐng)域的微控制器,具有高性能、低功耗、豐富的外設接口等特點。要對STM32單片機進行編程,需要選擇合適的軟件工具。 概述 STM32單片機
    的頭像 發(fā)表于 09-02 10:16 ?2140次閱讀

    嵌入式學習-常用編輯器之GCC編譯器

    、GCC編譯過程GCC編譯器的編譯過程要經(jīng)過預處理,編譯,匯編,鏈接等4步才能夠生成可執(zhí)行文件。預處理:主要實現(xiàn)將頭文件展開,宏定義替換以及解析條件編譯到文件
    發(fā)表于 08-27 10:17

    常用編輯器之GCC編譯器

    可執(zhí)行文件。預處理:主要實現(xiàn)將頭文件展開,宏定義替換以及解析條件編譯到文件;編譯:將預處理的代碼編譯轉(zhuǎn)換為匯編語言;匯編:將匯編語言翻譯成二進制
    發(fā)表于 08-24 11:05

    國產(chǎn)芯上運行TinyMaxi輕量級的神經(jīng)網(wǎng)絡推理庫-米爾基于芯馳D9國產(chǎn)商顯板

    cmake生成構(gòu)建系統(tǒng) 使用make構(gòu)建可執(zhí)行文件然后運行 可以看到輸出信息 MNIST 示例默認未使用任何指令加速,運行了一張 28×28 的手寫數(shù)字模擬圖像,共消耗了 0.114 毫秒 MBNET示例
    發(fā)表于 08-09 18:26

    國產(chǎn)芯上運行TinyMaxi輕量級的神經(jīng)網(wǎng)絡推理庫-米爾基于芯馳D9國產(chǎn)商顯板

    ;>cmake .. make./ mnist</font> cmake生成構(gòu)建系統(tǒng) 使用make構(gòu)建可執(zhí)行文件然后運行 可以看到輸出信息 MNIST
    發(fā)表于 08-07 18:06

    430單片機代碼debug后無法生成可執(zhí)行文件

    軟件是用許可證注冊過的,代碼是正確的,但是點完右上角那個build鍵后,消息框說生成不了可執(zhí)行文件,如圖
    發(fā)表于 07-15 09:28

    鴻蒙OpenHarmony【小型系統(tǒng) 實戰(zhàn)應用】(基于Hi3516開發(fā)板)

    系統(tǒng)啟動成功后,取源碼out目錄下的helloworld可執(zhí)行文件放入系統(tǒng)的bin目錄,通過以下步驟運行“Hello World”。
    的頭像 發(fā)表于 04-28 17:35 ?533次閱讀
    鴻蒙OpenHarmony【小型系統(tǒng) 實戰(zhàn)應用】(基于Hi3516開發(fā)板)

    用keil mdk編譯出的可執(zhí)行文件.axf,如何設置keil才能讓.axf包含.debug.str?

    用keil mdk編譯出的可執(zhí)行文件.axf,用readelf -S查看.axf文件信息,發(fā)現(xiàn)沒有.debug.str,請問如何設置keil才能讓.axf包含.debug.str C
    發(fā)表于 04-01 07:28

    fpga編程單片機編程的區(qū)別

    FPGA編程單片機編程的主要區(qū)別體現(xiàn)在以下幾個方面。
    的頭像 發(fā)表于 03-14 17:16 ?1168次閱讀
    主站蜘蛛池模板: 国产午夜精品一区二区理论影院 | 天堂在线资源最新版 | 国产亚洲午夜精品a一区二区 | 免费能直接在线观看黄的视频 | 久久狠狠色噜噜狠狠狠狠97 | 国产亚洲精品aa在线观看 | 天天操天天操天天 | 午夜影院美女 | 日本人69xxxxxxx69 | xxx日本69hd| 免费一级毛片视频 | 国产小视频在线高清播放 | 日本5级床片全免费 | 欧美成人aaaa免费高清 | 久久久免费观看 | 久久久久国产免费 | 天天色综合3 | 天堂avwww | 国产主播在线播放 | 性欧美高清强烈性视频 | 人人草在线 | 中文字幕佐山爱一区二区免费 | 国产农村乱色xxxx | 亚洲经典一区二区三区 | 欧美性极品xxxxx| 欧美性一区二区三区 | 黄色拍拍拍 | 亚洲精品久久久久午夜 | 国产亚洲精品自在久久77 | 国产乱子伦 | 色综合天天五月色 | 亚洲手机看片 | 国产裸露片段精华合集链接 | 午夜视频日本 | 日本黄色视 | 天天躁日日躁狠狠躁中文字幕老牛 | 91精品国产91久久久久青草 | 日韩欧美亚洲综合久久影院d3 | 35pao免费视频 | 美女国产视频 | 精品伊人久久大线蕉地址 |