日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

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

電子工程師 ? 來(lái)源:?jiǎn)纹瑱C(jī)匠人 ? 作者:黃忠老師 ? 2021-08-13 15:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

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

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

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

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

責(zé)任編輯:haq

聲明:本文內(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)注

    6078

    文章

    45612

    瀏覽量

    674663
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7844

    瀏覽量

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

    關(guān)注

    90

    文章

    3725

    瀏覽量

    97486

原文標(biāo)題:?jiǎn)纹瑱C(jī)生成可執(zhí)行文件之鏈接

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    飛凌嵌入式ElfBoard-進(jìn)程之什么是進(jìn)程

    :源代碼通過(guò)編譯、鏈接等步驟生成可執(zhí)行文件;解釋型腳本本身不需要編譯,相當(dāng)于可執(zhí)行文件。進(jìn)程是程序的動(dòng)態(tài)執(zhí)行實(shí)例,是程序在執(zhí)行時(shí)所占用的資源
    發(fā)表于 01-26 08:42

    初識(shí)ros2 功能包建立與可執(zhí)行文件的配置

    本文介紹了ROS2程序的兩種啟動(dòng)方式:直接運(yùn)行可執(zhí)行文件(ros2 run)和使用啟動(dòng)文件(ros2 launch)。重點(diǎn)講解了Python軟件包的結(jié)構(gòu),包括package.xml、setup.py
    的頭像 發(fā)表于 01-22 13:41 ?516次閱讀

    單片機(jī)里的程序運(yùn)行方式

    輸入./p后,首先檢查是否是一個(gè)內(nèi)建的shell命令;如果不是,則shell假設(shè)他是一個(gè)可執(zhí)行文件(Linux上一般是elf格式),然后調(diào)用一些相關(guān)的函數(shù),將在硬盤上的p文件的內(nèi)容拷貝到內(nèi)存(DDR
    發(fā)表于 01-16 06:57

    如何將Python GUI程序打包成EXE可執(zhí)行文件

    如果我們給同事展示一個(gè)命令行,他們可能會(huì)有點(diǎn)“嚇人”的感覺(jué),擔(dān)心忘記或輸錯(cuò)參數(shù)。而一個(gè) UI 界面則是一目了然,“選擇固件→點(diǎn)擊下載”這樣的流程幾乎零學(xué)習(xí)成本。
    的頭像 發(fā)表于 12-16 09:08 ?3966次閱讀
    如何將Python GUI程序打包成EXE<b class='flag-5'>可執(zhí)行文件</b>

    飛凌嵌入式ElfBoard-獲取文件的狀態(tài)信息之文件權(quán)限

    、可執(zhí)行文件等。b:表示這是一個(gè)塊設(shè)備文件,如硬盤、光驅(qū)等。c:表示這是一個(gè)字符設(shè)備文件,如鍵盤、鼠標(biāo)等。l:表示這是一個(gè)符號(hào)鏈接(軟連接)。s:表示這是一個(gè)套接字
    發(fā)表于 12-16 08:40

    單片機(jī)程序的執(zhí)行

    更快的SRAM,以得到更快的執(zhí)行速度。而對(duì)于,單片機(jī)而言工作頻率也就幾M,幾十M,從Flash與從RAM讀的差異可能并不明顯,不會(huì)成為
    發(fā)表于 12-04 06:20

    從代碼執(zhí)行單片機(jī)內(nèi)存的分配

    ,單片機(jī)的程序一般事先我們都已通過(guò)寫(xiě)入器固化在片內(nèi)或片外程序存儲(chǔ)器,因而一開(kāi)機(jī)即可執(zhí)行指令。 舉例說(shuō)明 下面,我們將舉個(gè)實(shí)例來(lái)說(shuō)明指令的執(zhí)行
    發(fā)表于 12-02 07:58

    為什么單片機(jī)還在用C語(yǔ)言編程

    的存儲(chǔ)空間。前提是確保程序的規(guī)范性和完整性。 2.我們?cè)谶M(jìn)行單片機(jī)編程時(shí),主要是通過(guò)對(duì)單片機(jī)的端口和內(nèi)部寄存器的操作和配置,這個(gè)需要比較精確的時(shí)序控制。 3.在需要單片機(jī)
    發(fā)表于 11-28 07:37

    51單片機(jī)RS485編程實(shí)例資料

    詳細(xì)介紹51單片機(jī)RS485通信接線和編程代碼
    發(fā)表于 10-20 14:57 ?6次下載

    飛凌嵌入式ElfBoard-Vim編輯器之GCC的基本使用

    條件編譯到文件;編譯:將預(yù)處理的代碼編譯轉(zhuǎn)換為匯編語(yǔ)言;匯編:將匯編語(yǔ)言翻譯成二進(jìn)制文件鏈接:將匯編出來(lái)的多個(gè)二進(jìn)制目標(biāo)文件和庫(kù)
    發(fā)表于 10-16 09:05

    【HZ-T536開(kāi)發(fā)板免費(fèi)體驗(yàn)】—— linux 進(jìn)程創(chuàng)建

    gcc fork.c -o fork.out 輸入ls 看到生成了可執(zhí)行文件fork.out 直接輸入./fork.out既可以執(zhí)行
    發(fā)表于 09-01 20:49

    單片機(jī)怎么驅(qū)動(dòng)電機(jī)?

    在各類自動(dòng)化設(shè)備和智能裝置,電機(jī)是重要的執(zhí)行部件,而單片機(jī)作為控制核心,需要通過(guò)特定的方式驅(qū)動(dòng)電機(jī)運(yùn)轉(zhuǎn)。單片機(jī)驅(qū)動(dòng)電機(jī)并非直接連接即可,而是要根據(jù)電機(jī)類型和功率,搭配合適的驅(qū)動(dòng)電路,
    的頭像 發(fā)表于 07-25 09:31 ?1413次閱讀

    單片機(jī)怎么燒程序

    單片機(jī)燒程序是將編寫(xiě)好的程序代碼寫(xiě)入單片機(jī)內(nèi)部存儲(chǔ)單元,讓單片機(jī)按照預(yù)設(shè)邏輯工作的過(guò)程,是單片機(jī)應(yīng)用開(kāi)發(fā)不可或缺的環(huán)節(jié)。無(wú)論是簡(jiǎn)單的燈光控
    的頭像 發(fā)表于 07-23 11:47 ?2155次閱讀

    【Milk-V Duo S 開(kāi)發(fā)板免費(fèi)體驗(yàn)】移植lrzsz方便使用zmodem進(jìn)行文件傳輸

    生成的可執(zhí)行文件位于src下三. 測(cè)試導(dǎo)出文件到開(kāi)發(fā)板scp src/lrz root@192.168.42.1:/root 需要輸入密碼milkv scp src/lsz
    發(fā)表于 07-08 15:01

    飛凌嵌入式ElfBoard ELF 1板卡-uboot編譯原理介紹

    用編譯工具將源碼文件編譯成可執(zhí)行文件的過(guò)程并不是一步到位的,其中要經(jīng)過(guò)一個(gè)類似工廠流水線的過(guò)程,交叉編譯工具包含負(fù)責(zé)處理各個(gè)環(huán)節(jié)的功能工具,所以叫做交叉編譯工具鏈。編譯的一般過(guò)程分為:預(yù)編
    發(fā)表于 05-22 11:17
    安庆市| 隆昌县| 大宁县| 门头沟区| 蓝田县| 崇仁县| 禹城市| 舟曲县| 莱西市| 常德市| 呈贡县| 剑阁县| 宾阳县| 德阳市| 三台县| 孟州市| 虎林市| 鸡西市| 德钦县| 平度市| 赤水市| 海阳市| 始兴县| 含山县| 平泉县| 霍林郭勒市| 紫阳县| 台南市| 福州市| 灵山县| 普兰县| 大宁县| 房产| 丰顺县| 榕江县| 宜章县| 化州市| 兖州市| 依兰县| 湘潭市| 湟中县|