1. gzyueqian
      13352868059

      嵌入式開發:設計HAL的10個技巧

      更新時間: 2022-09-24 09:13:17來源: 粵嵌教育瀏覽量:8457

        設計HAL是開發可重用且獨立于硬件的固件的重要第一步。HAL或硬件抽象層為嵌入式開發人員提供了一組標準函數,可用于訪問硬件功能,而無需詳細了解硬件的工作原理。

        Hal本質上是設計用于與硬件交互的API。一個正確設計的HAL為開發者提供了許多好處,比如代碼是可移植的、可重用的、低成本的、抽象的、以及更少的錯誤。然而,一個設計糟糕的HAL會導致成本增加和軟件錯誤。為確保正確,開發人員在設計自己的HAL時可以遵循以下10條技巧。

        技巧1——識別核心特征

        HAL需要是一組一致的標準函數,可以跨多個硬件平臺使用。微控制器帶有一套標準的外設,所有這些外設在嵌入式系統中都有特定的用途。開發HAL時,檢查每個標準微控制器外設,并確定其核心特性。例如,通信設備需要的一些核心功能是初始化、發送和接收功能。這些是幾乎任何應用程序都需要的基本必備功能。

        技巧2——避免無所不包的HAL

        嵌入式開發工程師有時會陷入“一環統一”的陷阱。陷阱在于,工程師從簡單而優雅的東西開始,然后發展解決方案以覆蓋項目流程。HAL設計者應該避免試圖創建一個包羅萬象或單一的HAL來控制每個微控制器設備和外設。避免使用包羅萬象的 HAL 的原因是,如果你試圖創建一個HAL,那么復雜性、成本和潛在的錯誤將會急劇增加。每個微控制器都有獨特的功能,所以不可能為它們創建一個標準而優雅的HAL。

        開發者能做些什么來處理HAL不能處理的外圍特性呢?答案是在HAL中內置寄存器訪問功能。HAL可能會暴露這樣一個事實,即它不能涵蓋外設的每一種可能的用途和狀態,而是提供對驅動程序內的選擇寄存器的讀寫訪問。寄存器訪問功能被認為是“專家”模式HAL功能,只應由熟悉微控制器內部工作原理的開發人員使用。

        技巧4——使用Doxygen勾勒HAL

        為HAL計劃和開發文檔的一個好方法是使用Doxygen。使用Doxygen來規劃HAL有許多優點。首先,Doxygen使用代碼注釋來生成HTML、RTF和PDF文檔,這意味著嵌入式開發人員已經有了關于不同函數應該做什么的源代碼注釋。第二,由于HAL的注釋是自動開發的,HAL源文件成為一個空白模板,開發者可以根據軟件體系結構和需求從該模板中填充HAL功能。最后,隨著時間的推移,對HAL的任何更新都可以在一個地方進行,即Doxygen文件,然后這些更新很容易傳播到文檔中。

        

        技巧5——第二次觀察

        重新審視 HAL 是獲得全新視角的絕佳方式。事實上,在任何開發周期中,最好的事情之一就是讓多方關注設計。每個工程師都有自己的觀點和經驗,可以為 HAL 做出貢獻。來自多方的反饋,尤其是那些可能必須使用HAL的人,是一個很好的方法,可以最大限度地減少需要對 HAL 進行多少更改,并有助于確保HAL將長期存在,以最大限度地提高代碼重用率并最大限度地降低成本。

        技巧6——不要害怕重復

        在HAL的首次發布中,會有一些在HAL的設計和評審中被忽略的小問題和發現。別擔心!設計一個完美的HAL是不現實的,目標應該是開發一個好到可以開始使用的HAL。收集HAL用戶的反饋,然后進行小的迭代更新。確保這些更改被很好地記錄下來,以便遺留的HAL用戶可以很容易地更新到最新的版本。經過幾次迭代之后,嵌入式開發人員會發現他們的HAL已經變成了一臺運轉良好的機器,節省了寶貴的開發時間。

        技巧7——保持30000英尺的視野

        請記住,HAL的目的之一是提供一個標準且一致的接口來抽象硬件功能。保持界面簡單,并保持硬件在 30,000 英尺視圖下工作的詳細程度。一個很好的測試是讓一個經理或一個軟件新手審查 HAL 并確保他們能夠理解它是如何工作的。

        將HAL保持在一個高的抽象層次不僅有助于最大化它的用途,還可以消除誤解,這些誤解會導致長時間的調試會話、增加成本或錯過最后期限。還要記住,HAL應該留有足夠的余地,讓嵌入式開發人員能夠以適合他們的需求和應用程序需要的方式實現HAL功能。API或HAL應該允許實現和支持不同的底層實現策略。

        技巧8——使用適當的命名約定

        開發HAL時,一個安全的做法是使用符合ANSI-C的接口。符合ANSI-C的HAL將確保跨多個編譯器和工具鏈的可移植性。ANSI-C兼容要求的一個例子是將函數名長度限制為31個有效字符。其他的考慮是使用標準的可移植類型和避免編譯器內部函數。另一個小技巧是定義一個簡短的編碼標準,包括命名和編碼標準最佳實踐,以及如何編寫HAL接口。

        技巧9——包含一個初始化參數

        嵌入式開發人員設計HAL時最常見的錯誤之一是讓外設初始化函數不帶參數。本質上,每個應用程序的初始化都是硬編碼的。無參數初始化極大地限制了HAL的可移植性。向配置表傳遞一個指針會更好地服務于初始化函數。最簡單的實現就是一個空的void表。一種更復雜的實現方式是使用指針遍歷表并配置外設。無論哪種方式,傳遞指針都為HAL提供了更好的可移植性和重用性。

        技巧10——在多個開發套件上部署

        測試HAL的一個簡單而有效的方法是將其部署在來自不同芯片供應商的多個微控制器上。開發簡單的測試代碼將有助于擺脫HAL,并預先闡明任何可移植性問題。開發套件是一個很好的方法,可以很便宜地獲得硬件來測試HAL。

        結論

        在嵌入式軟件領域使用HAL有很多好處。主要的好處是擁有一組定義明確的函數,允許應用代碼輕松地從微控制器移植到微控制器。其他好處包括重用、降低成本和硬件抽象化。一些嵌入式開發人員可能會認為HAL會降低執行效率并增加代碼空間。現代微控制器和編譯器的架構和優化能力幾乎已經解決了這些問題。

      免費預約試聽課

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

      
      

      1. 欧美日韩亚洲综合在线观看 | 色综合久久久久久久久五月 | 久久久久久91香蕉国产 | 亚洲国产天堂女人午夜看片 | 日韩中字幕波波 | 亚洲欧美中文日韩v在线97 |