1. gzyueqian
      13352868059

      嵌入式開發:5個可能不再被禁止的C特征

      更新時間: 2022-06-30 10:22:48來源: 粵嵌教育瀏覽量:8713

        最佳實踐和行業標準隨著時間的推移而發展和演變,但它們代表了指導智慧的快照。盡管技術進步使先前已知的最佳實踐無效,但最佳實踐可能發展緩慢,并且經常變得根深蒂固。在嵌入式開發領域使用 C 語言特征也遭遇了同樣的命運。許多最佳實踐起源于 80 年代和 90 年代,當時編譯器還很古怪,而微控制器確實資源有限。從那時起,編譯器和微控制器已經取得了長足的進步,許多“被禁止”的特征和設計技術可能不再如此。

        特征1 – Float

        在嵌入式系統中使用Float長期以來一直受到強烈反對。Float 傳統上存在許多潛在的問題來源。首先,微控制器沒有浮點單元。在大多數情況下,對于最低端的微控制器,這種說法在今天仍然適用,但包含浮點單元 (FPU) 的成本已大幅下降到中檔和通用微控制器開始包含 FPU 的程度。微控制器技術的進步現在還包括數學函數的硬件加速,即使沒有FPU也可以幫助加快計算速度。

        其次,在沒有 FPU 的情況下使用float需要編譯器引入龐大而緩慢的軟件庫。自20世紀后期以來,編譯器技術得到了極大的改進,即使在軟件中的8位微控制器上執行浮點計算也被優化到可以忽略不計的程度。技術正在發生變化,嵌入式開發人員需要隨之改變。

        特征2–malloc

        Malloc允許開發人員在程序執行期間動態分配內存,如果在嵌入式系統中使用不當,它可能是一個非常危險的工具。傳統上,在資源受限的系統中完全禁止使用malloc,這是有原因的。當堆變得支離破碎時會發生什么?開發人員如何處理內存分配失敗?內存泄漏怎么辦?這些都是困難的程序,需要代碼空間和馬力來處理,傳統的微控制器無法處理。

        微控制器不再“傳統”。2015年,低成本微控制器的時鐘速度可能超過200 MHz,閃存空間超過1 MB,RAM高達64 KB(高達256 MB)。即使在一個不那么強大的系統中,也有正確實現和使用malloc的工具。應用程序可能也很好地保證了這一點,因此不應該僅僅因為過時的最佳實踐就從一開始就將其排除在考慮之外。

        

        特征3 – printf

        一般來說,嵌入式開發人員在嵌入式系統中使用 C 庫函數被認為是不好的做法。大多數 C 庫不是可重入的,通常體積龐大且執行緩慢(或者是嗎?),或者以阻塞執行直到完成的方式實現。printf的使用屬于這些類別中的許多類別,并且已避免在嵌入式系統中使用。

        如前所述,在編譯器優化和硬件改進之間發生了很多變化,使用printf是過去的罪惡感??紤]到典型的32 kB閃存空間,該函數雖然被認為是“大”,但占用的代碼空間很小。典型的實現將printf用作阻塞函數,這會影響實時響應并占用潛在的共享資源。通過將printf鏈接到循環緩沖區和中斷驅動程序傳輸驅動程序,可以輕松克服響應問題,從而允許程序執行繼續,同時驅動程序執行必要的工作。

        特征4 – memset

        大多數涉及內存操作或動態內存的 C 特征最終都在禁止中。原因很明顯,許多嵌入式開發人員和團隊在過去使用這樣的特征時都吃了虧。當諸如 malloc 或 memset 之類的功能最有意義時,盡管不應回避它們。相反,開發人員應該確保他們完全了解如何使用該功能,正確使用需要哪些預防措施,在最壞的情況發生時如何恢復,當然還有適當的測試以確保一切按計劃進行。

        特征5 – C位字段

        一個概念是使用在C標準中定義模糊的特征,這個概念的使用并不植根于編譯器技術的進步或硬件的進步。這種特征的一個很好的例子是位字段。使用位字段的最大問題是通常存在可移植性問題。一個簡單的例子是,位的排序不是標準的,編譯器通??梢灾匦屡帕羞@些位,使之成為最有效的實現方式。向整體結構中添加填充字節也有問題。

        一般的經驗法則是避免使用位字段,但是有很多情況下它們是有意義的,甚至可移植性問題也無關緊要。使用位字段的一個很好的例子是創建一個結構,該結構用于創建初始化驅動程序或應用程序的配置表。通過寫入初始化來讀取位的值,重新排序甚至填充字節都不是問題。

        結論

        標準和最佳實踐旨在幫助開發人員避免搬起石頭砸自己的腳,但它們僅僅是最佳實踐。一個標準可能會說禁止使用C特征,但事實是,這取決于開發人員在他自己獨特的情況下決定傳統智慧是否適用。挑戰我們的先入之見,并確保我們理解為什么那些最佳實踐是適當的,這與遵循它們同樣重要。不要在不了解它們的應用、風險和回報的情況下就放棄它們。嵌入式開發人員在考慮使用這些“禁止”的特征時,需要了解它們的時間、性能和大小限制。

      免費預約試聽課

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

      
      

      1. 欧美亚洲人成网站在线观看刚交 | 亚洲影院色在线观看 | 亚洲一级aⅴ在线免费播放 香港三级日本三级a视频 | 亚洲再在线观看中文字幕精品 | 亚洲AV日韩综合一区尤物 | 久久综合久久自在自线精品自 |