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

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

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

代碼的可重用性是代碼開發(fā)和確??删S護(hù)性的關(guān)鍵

星星科技指導(dǎo)員 ? 來源:嵌入式計算設(shè)計 ? 作者:Colin Walls ? 2022-06-30 14:58 ? 次閱讀

實現(xiàn)嵌入式應(yīng)用程序的過程很好理解:

代碼(用 C/C++/匯編或其他語言)編寫并放置在許多文件(模塊)中。

每個模塊都經(jīng)過編譯/組裝以創(chuàng)建可重定位的目標(biāo)文件。該文件包含目標(biāo)處理器的機(jī)器指令,但地址信息尚未提交。

所有模塊都使用鏈接器(有時稱為鏈接器/定位器)集成在一起。此過程解析所有內(nèi)存引用并生成一個絕對目標(biāo)文件:最終系統(tǒng)內(nèi)存的圖像。

這種觀點有些簡單化,因為還有許多其他細(xì)微差別:

增量鏈接可用于將一個或多個可重定位對象連接在一起以形成單個可重定位對象。

可以調(diào)整鏈接/定位過程,以便代碼存儲在一個地方,但地址解析為在另一個地址執(zhí)行,已被引導(dǎo)加載程序復(fù)制到那里。

可以將可重定位的目標(biāo)文件鏈接在一起是產(chǎn)生目標(biāo)模塊庫的一種特殊方式。

“圖書館”一詞在各種情況下被使用和濫用。它的含義在這里定義明確??梢詫煳募B同可重定位的目標(biāo)文件一起提供給鏈接器。它的功能是解析可重定位目標(biāo)文件未提供的符號(通常是函數(shù)名)。例如,如果您在一個模塊中的代碼調(diào)用了函數(shù)MyFun()并且在另一個模塊中有此函數(shù)的定義,那么一切都很好。如果鏈接器沒有找到這個函數(shù),就會產(chǎn)生錯誤。但是,如果包含一個庫(或多個庫),則鏈接器將首先查找那里以解析符號。如果庫包含MyFun()函數(shù),則提取代碼并在最終的絕對文件中使用。

圖書館的意義可能并不明顯。你可以用一種簡單的方式將所有的可重定位文件鏈接在一起——為什么還要麻煩圖書館呢?這個想法是該庫包含大量函數(shù),但鏈接器僅提取當(dāng)前應(yīng)用程序所需的函數(shù)。未使用的永遠(yuǎn)不會從庫中提取,因此它們不會耗盡(即浪費)目標(biāo)內(nèi)存。

庫的主要目的是作為大量可重用代碼的存儲庫。在大型開發(fā)團(tuán)隊的項目中,這可能是一種很好的工作方式,在這種情況下共享代碼非常有益,“重新發(fā)明輪子”是不可取的,但很常見。應(yīng)仔細(xì)規(guī)劃和記錄項目庫。設(shè)計函數(shù)時必須考慮重用:不使用全局?jǐn)?shù)據(jù)、干凈、定義良好的接口、可重入性等。

開發(fā)工具供應(yīng)商通常會提供針對 C/C++ 標(biāo)準(zhǔn)化的庫。它們包含兩種類型的功能。顯而易見的是開發(fā)人員在需要時調(diào)用的顯式函數(shù)——比如printf()。其他庫函數(shù)是隱式的;它們由編譯器生成的代碼調(diào)用,并提供常用的功能,方便共享。

軟件 IP 供應(yīng)商也可能以庫的形式提供他們的產(chǎn)品。實時操作系統(tǒng) (RTOS) 通常以這種方式分布。這使得 RTOS 可以直接擴(kuò)展;應(yīng)用程序中僅包含所需的 RTOS 功能。

庫分布的一個問題是它們的“粒度”;可以提取多小的代碼?一些庫是由大塊構(gòu)建的。這意味著庫中的模塊可能包含屬于特定 RTOS 設(shè)施的所有服務(wù)功能。因此,例如,使用一個 RTOS 調(diào)用對信號量進(jìn)行操作將導(dǎo)致所有與信號量相關(guān)的服務(wù)調(diào)用函數(shù)都包含在應(yīng)用程序中。一個非常細(xì)粒度的庫可以與較小的單元一起使用。因此,使用單個服務(wù)調(diào)用將導(dǎo)致僅包含其代碼而不是相關(guān)函數(shù)的代碼。有一個權(quán)衡。一個非常細(xì)粒度的庫會延長鏈接時間,但目標(biāo)內(nèi)存不會浪費在未使用的服務(wù)調(diào)用函數(shù)上。

所有嵌入式軟件開發(fā)人員都應(yīng)該了解庫的工作方式及其提供的好處。代碼的可重用性是高效、高效的代碼開發(fā)和確??删S護(hù)性的關(guān)鍵。

審核編輯:郭婷

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

    關(guān)注

    5059

    文章

    18973

    瀏覽量

    302010
  • RTOS
    +關(guān)注

    關(guān)注

    21

    文章

    809

    瀏覽量

    119361
  • C++
    C++
    +關(guān)注

    關(guān)注

    21

    文章

    2100

    瀏覽量

    73453
收藏 人收藏

    評論

    相關(guān)推薦

    單片機(jī)芯片開發(fā)-單片機(jī)方案開發(fā)關(guān)鍵技巧和流程步驟!

    和驅(qū)動,將簡化后續(xù)開發(fā)的復(fù)雜。 編寫與調(diào)試代碼: 在編寫代碼時,建議采用模塊化設(shè)計,這樣便于后續(xù)的維護(hù)和升級。
    發(fā)表于 09-26 17:04

    單CPU 雙項目開發(fā)實現(xiàn)更好的維護(hù)和可行應(yīng)用說明

    電子發(fā)燒友網(wǎng)站提供《單CPU 雙項目開發(fā)實現(xiàn)更好的維護(hù)和可行應(yīng)用說明.pdf》資料免費下載
    發(fā)表于 09-12 09:42 ?0次下載
    單CPU 雙項目<b class='flag-5'>開發(fā)</b>實現(xiàn)更好的<b class='flag-5'>維護(hù)</b><b class='flag-5'>性</b>和可行<b class='flag-5'>性</b>應(yīng)用說明

    代碼整潔之道-大師眼中的整潔代碼是什么樣

    幾個月前寫了一篇文章“如何寫出難以維護(hù)代碼”,從中能大概了解到不好維護(hù)代碼是什么樣,有哪些壞味道,那肯定有人會反問,難以維護(hù)
    的頭像 發(fā)表于 09-09 16:30 ?263次閱讀
    <b class='flag-5'>代碼</b>整潔之道-大師眼中的整潔<b class='flag-5'>代碼</b>是什么樣

    深入淺出系列之代碼可讀

    ”,這是對我最大的鼓勵。 一、老生常談,到底啥是可讀 一句話:見名知其義。有人說好的代碼必然有清晰完整的注釋,我不否認(rèn);也有人說代碼即注釋,是代碼簡潔之道的最高境界,我也不否認(rèn)。但我
    的頭像 發(fā)表于 08-09 16:00 ?221次閱讀

    該如何提高代碼容錯率、降低代碼耦合度?

    提高RT-Thread代碼的容錯率和降低耦合度是確保代碼質(zhì)量和可維護(hù)性關(guān)鍵,下面列舉了幾種在編寫代碼
    的頭像 發(fā)表于 06-26 08:10 ?559次閱讀
    該如何提高<b class='flag-5'>代碼</b>容錯率、降低<b class='flag-5'>代碼</b>耦合度?

    EMI測試整改:確保電子設(shè)備電磁兼容關(guān)鍵步驟

    深圳比創(chuàng)達(dá)|EMI測試整改:確保電子設(shè)備電磁兼容關(guān)鍵步驟
    的頭像 發(fā)表于 04-29 14:40 ?495次閱讀
    EMI測試整改:<b class='flag-5'>確保</b>電子設(shè)備電磁兼容<b class='flag-5'>性</b>的<b class='flag-5'>關(guān)鍵</b>步驟

    代碼開發(fā)有哪些優(yōu)勢?

    代碼平臺以其高效、便捷、低成本的優(yōu)勢,正逐漸成為軟件開發(fā)領(lǐng)域中的性價比之王。它不僅能夠滿足快速開發(fā)的需求,還能夠降低技術(shù)門檻和維護(hù)成本,提高開發(fā)
    的頭像 發(fā)表于 04-09 16:03 ?820次閱讀
    低<b class='flag-5'>代碼</b><b class='flag-5'>開發(fā)</b>有哪些優(yōu)勢?

    新能源電池氣密檢測儀在電池維護(hù)中的重要

    密封。電池密封直接關(guān)系電池的防水級別。假如電池組輕微泄露,可能會致使水浸蝕電池內(nèi)部,造成腐蝕或短路等安全隱患。因而,定期開展氣密檢測是維護(hù)確保電池安全的關(guān)鍵一步。
    的頭像 發(fā)表于 04-06 11:16 ?330次閱讀
    新能源電池氣密<b class='flag-5'>性</b>檢測儀在電池<b class='flag-5'>維護(hù)</b>中的重要<b class='flag-5'>性</b>

    CPCI設(shè)計與制造:提高制造關(guān)鍵要素

    。 華秋DFM軟件是國內(nèi)首款免費PCB制造和裝配分析軟件,擁有 500萬+元件庫 ,輕松高效完成裝配分析。其PCB裸板的分析功能,開發(fā)了 19大項,52+細(xì)項檢查規(guī)則 ,PCBA
    發(fā)表于 03-26 18:34

    【華秋干貨鋪】4點搞定Type-C接口的PCB制造設(shè)計優(yōu)化!

    確保信號同步和完整。 CC1/CC2關(guān)鍵引腳的布局 :CC1/CC2是兩個關(guān)鍵引腳,它們的作用包括:探測連接,區(qū)分正反面,區(qū)分DFP(下行端口)和UFP(上行端口),以及主從配置Vb
    發(fā)表于 12-08 10:18

    4點搞定Type-C接口的PCB制造設(shè)計優(yōu)化!

    確保信號同步和完整。 CC1/CC2關(guān)鍵引腳的布局 :CC1/CC2是兩個關(guān)鍵引腳,它們的作用包括:探測連接,區(qū)分正反面,區(qū)分DFP(下行端口)和UFP(上行端口),以及主從配置Vb
    發(fā)表于 12-08 10:15

    4點搞定Type-C接口的PCB制造設(shè)計優(yōu)化!

    來增加短線長度,以確保信號同步和完整。 CC1/CC2關(guān)鍵引腳的布局 : CC1/CC2是兩個關(guān)鍵引腳,它們的作用包括:探測連接,區(qū)分正反面,區(qū)分DFP(下行端口)和UFP(上行端口
    發(fā)表于 12-05 15:06

    php設(shè)計模式和應(yīng)用場景

    PHP設(shè)計模式是一套經(jīng)過實踐驗證的軟件設(shè)計經(jīng)驗,它們可以幫助開發(fā)人員解決常見的問題,提高代碼重用
    的頭像 發(fā)表于 12-04 14:54 ?785次閱讀

    python如何換行而不運行代碼

    Python程序中的換行是指在代碼中使用特定的語法來表示換行,以使代碼更易讀。換行的目的是為了讓程序更具可讀并提高代碼可維護(hù)性。然而,換
    的頭像 發(fā)表于 11-24 09:50 ?3042次閱讀

    基于嵌入式ASIL D產(chǎn)品的開發(fā)經(jīng)驗

    軟件開發(fā)始于需求卻不能終于需求,我們在滿足需求的同時,還需要考慮代碼本身的質(zhì)量,包括可讀、可維護(hù)性擴(kuò)展性、可移植
    的頭像 發(fā)表于 11-21 16:32 ?405次閱讀
    基于嵌入式ASIL D產(chǎn)品的<b class='flag-5'>開發(fā)</b>經(jīng)驗