嵌入式軟件開發人員通常避開硬件抽象層(HAL ),聲稱它們會降低性能并增加代碼復雜性。但是,當開發人員采用HAL時,供應商提供的HAL通常不抽象硬件,仍然保證與硬件的緊密耦合。畢竟,一個真正抽象的HAL將使嵌入式開發人員能夠立即使用任何供應商。然而,使用或開發你自己的HAL會在很多方面影響你的軟件。在本文中,我們將探索5種HAL可以改變你的軟件項目的方式。
方式1–硬件獨立性
開發人員通常有一個最喜歡的微控制器供應商。通常是第一次編寫嵌入式軟件的供應商或者熟悉的供應商。和其他人一樣,我也有自己的愛好,但是依賴他們的HAL或軟件庫來編寫軟件可能是危險的。比如你突然拿不到他們的微控制器怎么辦?你必須選擇一個新的供應商,然后重寫,測試,甚至認證你的產品。那不算快也不算便宜!
使用一個好的HAL將允許你編寫更易移植和可重用的獨立于硬件的應用程序代碼。對于許多嵌入式團隊來說,這是一個巨大的轉變。例如,你可以使用供應商A運行代碼,并通過更改版本中的標志,為供應商b編譯代碼。硬件獨立性使你可以靈活地使用任何你想要的硬件,并消除你對微控制器供應商的依賴。
如果你喜歡使用供應商提供的HAL,只要你回顧幾個基本特性,這是可以的。首先,HAL必須是一個真正的HAL。這意味著你必須有一個定義好的接口來打破對硬件的依賴。接下來,HAL應該與實現分開定義。最后,你應該能夠快速換出接口調用的函數。如果你沒有這三樣特性,那么你就沒有硬件獨立性,你有硬件依賴!
方式2——實現自動化單元和集成測試
釋放價值和轉變軟件開發的關鍵從使用HAL開始。HAL進一步支持額外的轉換,比如支持自動化單元和集成測試。嵌入式開發人員經常糾結于單元測試,因為他們編寫的代碼會接觸到硬件。這意味著你必須在微控制器上運行你的測試。當你有了一個合適的HAL,你仍然需要在目標上測試你的驅動,但是你所有的應用程序代碼突然被釋放了!你的應用程序代碼現在可以在獨立于硬件的主機上進行單元和集成測試。
將硬件從等式中移除并將測試轉移到主機有利于開發人員。首先,它更快。你不必擔心器件的緩慢擦除和寫入周期。其次,你不需要擔心你的測試工具有多大或者你有多少測試。你只需首先在主機上測試所有應用程序代碼,而不是嘗試在微控制器上運行你的代碼和測試。接下來,轉移到非目標測試使你可以利用持續集成甚至持續部署。其結果將是越來越快地發現缺陷,降低成本,提高質量。
方式3–執行脫靶模擬的能力
當你使用一個好的HAL將硬件排除在等式之外時,它允許你將任何實現放在它后面。這意味著你可以為你的目標、你的測試工具和模擬環境提供一個實現!在許多情況下,嵌入式軟件開發人員必須在硬件可用之前開始編寫軟件。因此,雖然我們可以使用開發板開始,但有了一個好的HAL,我們可以在我們的應用程序代碼上運行模擬!
模擬應用程序代碼對開發人員來說有很多好處。首先,它允許他們更快地在客戶面前獲得應用程序代碼。我們都知道客戶喜歡改變主意,并且在體驗產品之前很難想象產品的工作方式。模擬可以幫助客戶了解產品并更快地提供富有成效的反饋,從而減少開發周期后期昂貴且耗時的更改。
其次,模擬允許在沒有硬件的情況下測試故障和其他異常行為,從而實現更強大的測試。例如,讓傳感器行為不當或在目標處理器上強制硬件異常通常具有挑戰性。在模擬環境中,這不是問題。
方式4–更快、更高效的調試
當你在目標上調試時,每次進行更改時,都會有一個交叉編譯、擦除閃存、編程閃存和運行應用程序的循環。根據應用程序的不同,即使使用專業工具,整個過程也可能需要相當長的時間。使用HAL來分離應用程序可以更快地調試代碼!在主機上,編譯和運行周期要短得多。這意味著開發人員可以更快地解決問題,然后在必要時在他們的硬件上測試最終調試版本。
如果你允許HAL提供的其他轉換實現,你將使用單元測試來驅動開發,這意味著你甚至可以花更少的時間進行調試。你將只編寫通過測試的代碼。你的軟件將會以小增量的方式編寫,測試會一直驗證它。如果你破壞了什么東西,回歸測試會立即發現它。其結果將是更快、更有效的調試。
方式 5–上市時間和成本降低
使用HAL開發嵌入式軟件的最終轉變是降低成本和縮短上市時間。HAL在嵌入式軟件中創造了大多數團隊做夢都沒有想到的靈活性。你可以很容易地看到,如果你可以快速獲得客戶反饋,你將在開發周期的后期減少返工。此外,如果你可以消除調試,那將是巨大的好處!大多數團隊平均花費20-40%的開發周期進行調試!也就是每人每年2.4-4.5個月!這都是因為你使用了一個HAL來測試你的應用程序代碼并減少調試時間。
隨著上市時間的縮短,成本顯然會降低。為了確保開發周期順利進行,在HAL開發、測試工具和其他工具方面肯定有投資。然而,這些成本通常比節省的成本低一個數量級。