今天使用微控制器的一個主要優(yōu)勢是嵌入式軟件開發(fā)人員通常不必再編寫自己的驅動程序。微控制器供應商提供軟件框架來抽象硬件并允許開發(fā)人員進行簡單的函數(shù)調用來初始化、讀取和寫入外圍設備(如
SPI、UART、模數(shù)轉換器等)是很常見的。然而,嵌入式開發(fā)人員仍然經(jīng)常需要編寫驅動程序來與外部集成電路進行交互,這些集成電路可能是傳感器、執(zhí)行器、電機控制器等。在今天的文章中,我們將探討幾個編寫自己的外部設備驅動程序的最佳實踐。
最佳實踐 #1——將實現(xiàn)與配置分開
編寫任何驅動程序的一個關鍵方面是將實現(xiàn)與配置分開。這種分離有助于確保驅動程序可重用和靈活。例如,驅動程序可以很容易地編譯成一個目標文件,這樣開發(fā)人員就看不到內部,因此它可以用于多個項目。開發(fā)人員仍然可以訪問配置模塊,他們可以使用該模塊來配置驅動程序以滿足其特定的應用程序需求。如果配置需要機會,它不會影響驅動程序設計或強制使用驅動程序的其他項目不同步或被迫接受新更改并經(jīng)歷驗證周期。
將實現(xiàn)與配置分開還允許抽象外部硬件,以便開發(fā)人員不需要完全了解硬件中發(fā)生的事情,就像在微控制器上一樣。我經(jīng)常希望集成電路供應商停止提供配置工具
GUI,而是花精力為他們的設備編寫可重用和便攜的驅動程序。他們的每個客戶都很難通過閱讀大約 100
頁的數(shù)據(jù)表來編寫驅動程序并理解他們的模塊。
最佳實踐#2——創(chuàng)建一個簡單的底層接口
在編寫驅動程序時,嵌入式開發(fā)人員試圖在他們的實現(xiàn)中做太多事情,驅動程序成為驅動程序和應用程序代碼的混合體,驅動程序的接口應該包含一個簡單的接口,其中包括:
一個初始化函數(shù)
寫函數(shù)
讀取功能
除此之外的任何東西都真正開始進入應用程序領域!這背后的邏輯很簡單,驅動程序應該簡單地提供與設備通信并允許讀取和寫入操作的能力,然后,應用程序模塊將訪問這些讀取和寫入功能,以構建更高級別應用程序代碼所需的可重用應用程序組件。
最佳實踐#3——提供錯誤檢測
不幸的是,許多嵌入式開發(fā)人員編寫的代碼只是假設一切都會好起來的,在為外部設備編寫驅動程序時,我們沒有那么奢侈。設備驅動程序應考慮潛在的錯誤和故障。例如驅動程序可以超時并提供錯誤嗎?如果執(zhí)行了讀操作,函數(shù)能否返回讀是否成功?如果發(fā)生奇偶校驗錯誤怎么辦?
有幾種不同的方法可以在驅動程序中提供錯誤和故障檢測。首先,每個函數(shù)都可能返回錯誤代碼。如果操作成功,則此錯誤代碼將簡單地為真,如果發(fā)生問題,則此錯誤代碼將簡單地為假。其次,如果確實發(fā)生了問題,那么可以在設備接口中添加一個允許檢查錯誤的附加功能,會包括以下附加操作:
返回驅動錯誤狀態(tài)
清除驅動錯誤狀態(tài)
同樣,這為驅動程序提供了靈活性和故障檢測能力,并允許應用程序代碼仔細監(jiān)控驅動程序操作是否成功。
為微控制器之外的集成電路編寫設備驅動程序是嵌入式開發(fā)人員的最后一個前沿領域之一,我們仍然必須編寫自己的驅動程序。在今天的帖子中,我們研究了為外部集成電路編寫驅動程序的幾個最佳實踐,這些最佳實踐將幫助讀者開發(fā)可擴展和可重用的驅動程序,這些驅動程序可以檢測故障并允許應用程序代碼做出適當?shù)捻憫?/span>