1. 程式人生 > >嵌入式開發之編寫設備驅動程序(一)

嵌入式開發之編寫設備驅動程序(一)

循環 挑戰 重要 同時 地址空間 百萬 發的 隨著 新的

  前面談到有關驅動程序的相關簡述,寫了什麽是驅動程序,以及驅動程序在嵌入式開發中占據的重要地位。同時也簡要分析了驅動程序開發所面臨的挑戰。接下來談談如何來完成驅動程序的編寫。

  這裏有以下幾個問題:

  (1)代碼為何而寫?

  (2)在進行驅動程序編寫前應該怎麽做,或者說該思考些什麽?

  (3)是否已經想好驅動程序文件的組織形式?

  (4)硬件和軟件之間驅動接口是否已經有了眉目?

  一、代碼為何而寫?

  站在編寫驅動程序人員角度,我談談自己的看法,當然,我不是專業驅動程序編寫人員,但是我還是想談談自己的一些想法。廠家出了新的硬件,需要配套的驅動程序,這就需要設備驅動程序的開發了。往往,硬件和配套的驅動程序是一項獨立的知識產權,在做嵌入式軟件開發中,為了一個驅動程序包,哈哈!往往在Internet上各處尋覓。

  二、在進行驅動程序編寫前應該做什麽?

   說一說整個驅動程序編寫,需要完成的步驟:

  (1)首先要進行規範制定,確定需求目標,沒有需求就如同大海裏的孤帆,指明設備驅動程序所需要提供的服務是首要步驟。

  (2)在軟件和硬件之間進行接口的定義,確保該接口好用好使。

  (3)最後就是驅動程序代碼的編寫了,這就如同一個循環,結束的條件就是驅動程序=Perfect,不然就不斷循環編寫-調試代碼吧。

   所以說,在進行驅動程序編寫前還是需要仔細考慮一下下滴。當然我能體會到驅動程序開發的難度以及代碼量的龐大!

  三、設備驅動程序的相關知識  

   通常情況下,CPU計算能力強,可以處理數據空間和驅動程序組件寄存器中的數以百萬計的地址。硬件中往往都有寄存器,這裏就不談什麽是寄存器了(專門寫在了第四點上),設備驅動程序可以對寄存器進行讀和寫操作,這些寄存器都被映射到了存儲器中,每一個寄存器都有一個唯一的內存地址,通過這個唯一的內存地址就可以找到對應的寄存器進行讀寫操作了,為什麽要進行讀寫操作呢?哈哈,這點我最開始也不是很理解,到後來我逐漸領悟了一些,通過寄存器就可以來操控硬件芯片這些啦,同時硬件也能夠通知軟件關於硬件的相關狀態。

  四、寄存器簡介

    在硬件芯片設計時,那些寄存器就已經有了著落了,一塊硬件芯片上寄存器很多,但是都根據相關功能模塊進行了寄存器分組,並分配了唯一地址空間,這點可以看看相關MCU的硬件開發手冊,就能很好體會。

一般有三種不同的寄存器:數據寄存器、控制寄存器、狀態寄存器。這些都可以用來存儲數據。

   (1)數據寄存器用來存放一些數據的。比如說一個定時器數據寄存器,該寄存器名為:TIMEDATA_REG,那麽該寄存器中就保存了定時器某個時刻的時間值,該值隨著時間變換而變,驅動程序可以讀出時間值,然後應用程序就可以利用時間了。

    (2)控制寄存器是用來控制硬件功能的 ,根據任務的不同可以對其進行配置,當然,應用程序是需要驅動程序來對控制寄存器進行讀寫的,沒了驅動辦不成事兒。

   (3)狀態寄存器用來保存硬件的狀態信息(例如,是否處於繁忙狀態?是否處於完成狀態?),利用這些狀態寄存器就可以很好編寫驅動程序了,因為給出了程序的運行條件。

  五、重要一點  

   編寫設備驅動程序需要詳細了解硬件寄存器的設計,如何與硬件寄存器進行通信以及所需服務,這些都是技術關鍵!

嵌入式開發之編寫設備驅動程序(一)