1. gzyueqian
      13352868059

      嵌入式開發(fā):編寫可移植C代碼的7個(gè)技巧

      更新時(shí)間: 2022-09-19 09:37:10來源: 粵嵌教育瀏覽量:8095

        用C編寫可移植和可重用的軟件正迅速成為嵌入式軟件領(lǐng)域的一項(xiàng)重要活動(dòng)。但是可移植的C代碼不是偶然發(fā)生的,它需要意圖和深謀遠(yuǎn)慮。嵌入式開發(fā)人員可以遵循七個(gè)技巧來幫助確保他們的軟件更適合移植。

        技巧1——使用模塊級API

        定義一個(gè)模塊級API對于C代碼是否可移植至關(guān)重要。模塊級API定義了模塊做什么以及它的輸入和輸出是什么。

        技巧2——最小化模塊耦合

        移植代碼時(shí),沒有什么比試圖引入緊密耦合的代碼更痛苦的了。緊密耦合的代碼非常棒,因?yàn)樗鼘ν獠緾模塊的依賴性很小。然而,耦合度越大,新代碼中需要包含的模塊就越多,結(jié)果,這個(gè)過程就越長,越痛苦。緊密耦合的代碼也會(huì)導(dǎo)致ROM膨脹,因?yàn)椴槐匾拇a會(huì)隨必要的代碼一起出現(xiàn)。著眼于可移植和可重用代碼的開發(fā)人員應(yīng)該盡量減少代碼對外部模塊的依賴。

        技巧3——封裝

        面向?qū)ο笤O(shè)計(jì)的關(guān)鍵概念之一是封裝。封裝可以理解為信息隱藏,其思想是,模塊開發(fā)人員應(yīng)該只公開外部用戶訪問模塊行為所需的變量和函數(shù),其他的一切都應(yīng)該隱藏起來。C 中最好的封裝方式是大量使用關(guān)鍵字 static。默認(rèn)情況下,函數(shù)和變量是隱式的 extern。為了幫助隱藏內(nèi)部函數(shù)和變量,嵌入式開發(fā)人員可以使用靜態(tài)說明符來限制它們的范圍并從本質(zhì)上隱藏?cái)?shù)據(jù)。

        技巧4——使用ANSI-C

        許多編譯器都有內(nèi)部特性或擴(kuò)展旨在通過提供未在 ANSI-C 標(biāo)準(zhǔn)中定義的功能來幫助開發(fā)人員使用這些功能(其中許多使用 #pragma )的問題在于它們是特定于編譯器的。試圖從一個(gè)編譯器轉(zhuǎn)移到下一個(gè)編譯器會(huì)導(dǎo)致編譯器錯(cuò)誤和潛在的軟件錯(cuò)誤,這取決于所使用的附加功能。對可移植和可重用代碼感興趣的開發(fā)人員應(yīng)該限制自己使用 ANSI-C 甚至嚴(yán)格的 ANSI-C 編譯。

        

        技巧5——定義一個(gè)C風(fēng)格的指南

        在開發(fā)可移植代碼時(shí),C風(fēng)格指南的使用似乎并不重要。畢竟,開發(fā)人員永遠(yuǎn)不知道代碼是否會(huì)被重用,如果是,代碼可能會(huì)被移植到一個(gè)風(fēng)格完全不同的代碼庫中。此外,公司C風(fēng)格指南往往會(huì)隨著時(shí)間的推移和員工的更替而演變。但是使用風(fēng)格指南的全部意義,即使將來會(huì)有所不同,是為了確保代碼至少遵循一個(gè)共同的約定。這種約定將使代碼更容易被未來的嵌入式開發(fā)人員閱讀和理解,他們的任務(wù)是在新項(xiàng)目中導(dǎo)入代碼。

        技巧6——很好地記錄代碼

        在理想的情況下,所有代碼文檔中至少會(huì)包含五個(gè)不同的方面。第一個(gè)是一個(gè)基本的需求文檔,定義模塊首先應(yīng)該做什么。其次,應(yīng)該有設(shè)計(jì)文檔和代碼模型來演示它是如何工作的。第三,應(yīng)該提供原始開發(fā)人員關(guān)于實(shí)現(xiàn)的代碼如何工作的想法和假設(shè)。第四是關(guān)鍵參數(shù)和算法細(xì)節(jié)的列表,以及在移植或修改軟件時(shí)可能出現(xiàn)故障的關(guān)鍵區(qū)域。最后,實(shí)際的 C 代碼后面應(yīng)該有實(shí)際的代碼注釋。一個(gè)額外的好處是收到模塊級單元測試的文檔,它們是如何執(zhí)行的,以及任何相關(guān)的結(jié)果。

        技巧 7——避免位字段領(lǐng)域

        僅僅因?yàn)橐粋€(gè)特性存在于C語言中,并不意味著它可以很容易地在編譯器之間移植。C標(biāo)準(zhǔn)有一些模糊的地方,編譯器供應(yīng)商可以選擇如何實(shí)現(xiàn)標(biāo)準(zhǔn)。這些模糊的領(lǐng)域中最廣為人知的可能是位字段領(lǐng)域。編譯器有權(quán)決定位的排序位置,甚至最終位字段的字節(jié)順序。

        理論上,位字段是可以移植的,但這實(shí)際上取決于程序員打算如何使用它們。使用位操作或掩碼訪問該字段會(huì)導(dǎo)致兩個(gè)不同編譯器之間完全意外的行為。因此,開發(fā)人員應(yīng)該確保他們完全理解C標(biāo)準(zhǔn)中的漏洞以及如何保護(hù)他們的代碼。

        結(jié)論

        在當(dāng)今快節(jié)奏的開發(fā)環(huán)境中,開發(fā)可移植和可重用的C代碼正迅速成為每個(gè)嵌入式開發(fā)團(tuán)隊(duì)的必須。這里介紹的七個(gè)技巧只是冰山一角。

      免費(fèi)預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 午夜日本永久乱码免费播放片 | 亚洲精品国产一卡二卡三 | 日本喷奶水中文字幕视频 | 中文字幕永久在线看 | 亚洲精品国产精品国自产 | 亚洲美乳中文字幕 |