1. 程式人生 > >嵌入式系統開發:驅動程式設計的5個竅門

嵌入式系統開發:驅動程式設計的5個竅門

作者:Jacob Beningo

【編者按】在嵌入式系統的開發中,驅動程式的設計和實施是一個關鍵組成部分,是滿足系統實時性需求的關鍵。本文由資深嵌入式軟體開發專家Jacob Beningo撰寫,總結了設計驅動程式開發者應該掌握的五個技巧。

每一個嵌入式應用軟體都會在某些時候訪問最底層的韌體和進行一些硬體控制。 驅動的設計和實施是確保一個系統能夠滿足其實時性要求的關鍵。以下五個竅門是每一個開發者在設計驅動程式時應該考慮的。

1 - 使用設計模式

設計模式是一個用來處理那些在軟體中會重複出現的問題的解決方案。 開發人員可以選擇浪費寶貴的時間和預算從無到有地重新發明一個解決方案,也可以從他的解決方案工具箱中選擇一個最適合解決這個問題的方案。在微處理器出現之初,底層驅動已經很成熟了,那麼,為什麼不利用現有的成熟的解決方案呢?

驅動程式設計模式大致分屬以下4個類別:bit bang、輪詢、中斷驅動和直接儲存器訪問(DMA)。

  • Bit bang模式:當微控制器沒有內外設去執行功能的時候,或者當所有的內外設都已經被使用了,而此時又有一個新的請求,那麼開發者就應該選擇bit bang設計模式。Bit bang模式的解決方案很有效率,但通常需要大量的軟體開銷來確保其實施的能力。bit bang模式可以讓開發者手動完成通訊協議或外部行為。
  • 輪詢模式用於簡單地監視一個輪詢排程方式中的事件。輪詢模式適用於非常簡單的系統,但許多現代應用程式都需要中斷。
  • 中斷可以讓開發者在事件發生時進行處理,而不用等程式碼手動檢查。
  • DMA(直接儲存器訪問)模式
    允許其它外圍裝置來處理資料傳輸的需求,而不需要驅動的干預。

2 - 瞭解實時行為

一個實時系統滿足是否能滿足實時需求取決於它的驅動程式。寫入能力差的驅動是低效的,並可能使不知情的開發者放棄系統的效能。設計者需要考慮驅動的兩個特點:阻塞和非阻塞。一個阻塞的驅動程式在其完成工作之前會阻止其他任何軟體執行操作。例如,一個USART驅動程式可以把一個字元裝入傳輸緩衝區,然後一直等到接收到傳輸結束標誌符才繼續執行下一步操作。

另一方面,非阻塞驅動則是一般利用中斷來實現它的功能。中斷的使用可以防止驅動程式在等待一個事件發生時攔截其他軟體的執行操作。USART的驅動程式可以將一個字元裝入傳輸緩衝區然後等主程式釋出下一個指令。傳輸結束標誌符的設定會導致中斷結束,讓驅動進行下一步操作。

無論哪種型別,為了保持實時效能,並防止系統中的故障,開發人員必須瞭解驅動的平均執行時間和最壞情況下的執行時間。一個完整的系統可能會因為一個潛在的風險而造成更大的安全問題。

3 - 重用設計

在時間和預算都很緊張的情況下為什麼還要再造輪子呢?在驅動程式開發中,重用、便攜性和可維護性都是驅動設計的關鍵要求。這裡面的許多特徵可以通過硬體抽象層的設計和使用來說明。

硬體抽象層(HAL)為開發人員提供一種方式來建立一個標準介面去控制微控制器的外設。抽象隱藏實現細節,取而代之的是提供了視覺化功能,如Usart_Init和Usart_Transmit。這個方法就是讓任何USART、SPI、PWM或其他外設具備所有微控制器都支援的共同特點。 使用HAL隱藏底層、特定裝置的細節,讓應用程式開發人員專注於應用的需求,而不是關注底層的硬體是如何工作的。同時HAL提供了一個重用的容器。

4 -參考資料手冊… 是的,全部

微控制器在過去的幾年裡變得越來越複雜。以前想要完全瞭解一個微控制器需要掌握由一個大約包含500頁組成的單一資料手冊。而如今,一個32位微控制器通常包含由部分的資料手冊、整個微控制器系列的資料表、每個外設數以百計的資料以及所有的勘誤表組成的資料手冊。 開發人員如果想要完全掌握這部分的內容需要了解幾千頁的檔案。

不幸的是,所有這些資料手冊都是一個驅動程式能真正合理實現所需要的。開發人員在一開始就要對每個資料手冊中包含的資訊進行收集和排序。通常它們中的每一個都需要被訪問以使外設啟動和執行。 關鍵資訊被分散(或隱藏)在每種型別的資料手冊中。

5 - 謹防外設故障

最近我剛好有機會把一系列的微控制器驅動移植到其他的微處理器上。製造商和資料手冊都表明PWM外設在這兩個系列的微控制器之間是相同的。 然而,實際情況卻是在執行PWM驅動器的時候兩者之間有很大的不同。該驅動程式只能在原來的微控制器工作,而在新系列的微控制器上卻無效。

在反覆翻看資料手冊之後,我在資料手冊中一個完全不相關的註腳裡發現了PWM外設上電時會處於故障狀態,需要將一個隱藏在暫存器中的標誌位清零。

在驅動程式實現的開始,確認外設可能出現的故障並檢視其他看似無關的暫存器錯誤。

物聯網(IoT)包括嵌入式系統將是CSDN在2016年重點運營的內容之一,進一步瞭解和探討驅動程式的設計模式以及如何構建嵌入式系統,您可以:

  • 關注微信公眾號:IoTMaster
  • 加入CSDN IoT技術微信群:新增jianding_zhou為好友,請註明來意、所在機構及技術專長

作者簡介:Jacob Beningo是認證軟體開發專家(CSDP),其專長是嵌入式軟體開發。他與公司一起致力於在保持產品質量的同時降低產品成本並縮短上市時間。您可以通過[email protected]隨時聯絡他。

原文連結:5 Tips for driver design (翻譯/Gawain Gao 審校/周建丁 翻譯或原創投稿請聯絡[email protected],優稿優酬)