使用HAL是開(kāi)發(fā)可輕松重用并從一個(gè)應(yīng)用程序和平臺(tái)移植到下一個(gè)應(yīng)用程序和平臺(tái)的軟件的好方法。為什么嵌入式開(kāi)發(fā)人員會(huì)想做這樣的事情?對(duì)于初學(xué)者來(lái)說(shuō),一遍又一遍地重新發(fā)明輪子會(huì)很無(wú)聊。
即使對(duì)于喜歡一遍又一遍地做同樣事情的開(kāi)發(fā)人員來(lái)說(shuō),開(kāi)發(fā)時(shí)間線很短,預(yù)算很緊,而且在任何給定的項(xiàng)目上都需要做太多的工作。因此,目標(biāo)是編寫可重用的代碼,為此,開(kāi)發(fā)人員需要?jiǎng)?chuàng)建一個(gè)硬件抽象層,以允許他們的中間件和應(yīng)用程序代碼通用地訪問(wèn)微控制器硬件。
創(chuàng)建堅(jiān)如磐石的HAL并非一朝一夕。創(chuàng)建HAL的過(guò)程是一個(gè)迭代過(guò)程,很可能需要數(shù)年時(shí)間。好消息是開(kāi)發(fā)人員可以非常快速地創(chuàng)建HAL,然后隨著每個(gè)項(xiàng)目的調(diào)整和修改,直到遇到幾乎所有可以想象的排列。我們將介紹HAL創(chuàng)建過(guò)程,但在此之前,讓我們先看看每個(gè)HAL需要具備的特性。
一個(gè)好的HAL的特征:
人類可讀
抽象的復(fù)雜性
有據(jù)可查
便攜的
通用控制能力
可擴(kuò)展的特定控制能力
封裝數(shù)據(jù)
可重復(fù)使用的
可維護(hù)
硬件抽象層應(yīng)該包含一組基本的函數(shù)來(lái)控制人類可讀和通用的底層外圍設(shè)備。界面應(yīng)該很簡(jiǎn)單,包含不到十幾個(gè)功能。界面變得越復(fù)雜,界面就越難以理解、移植和簡(jiǎn)單地使用。嵌入式開(kāi)發(fā)人員應(yīng)該只公開(kāi)界面的需要知道的信息,并允許將所有細(xì)節(jié)隱藏在界面后面。使用HAL的開(kāi)發(fā)人員不需要成為底層硬件和復(fù)雜性方面的專家,只需了解如何使用接口即可!
HAL設(shè)計(jì)過(guò)程
設(shè)計(jì)硬件抽象層是一個(gè)相對(duì)直接的過(guò)程,對(duì)于每個(gè)微控制器外圍設(shè)備可能會(huì)針對(duì)不同的架構(gòu)重復(fù)多次。一般過(guò)程包含七個(gè)步驟:
查看微控制器外設(shè)數(shù)據(jù)表
識(shí)別外圍功能
設(shè)計(jì)和創(chuàng)建界面
創(chuàng)建存根和文檔模板
為目標(biāo)處理器實(shí)施
測(cè)試
對(duì)每個(gè)外圍設(shè)備重復(fù)
在本章中,我們介紹了設(shè)計(jì)硬件抽象層的通用過(guò)程,這個(gè)過(guò)程雖然看起來(lái)很簡(jiǎn)單,但在變得完全清晰之前可能需要嵌入式開(kāi)發(fā)人員執(zhí)行幾次。