無論是做linux下的驅動開發,還是Windows CE平台下的驅動開發,對流式驅動模型一定非常熟悉。在此架構下,把所有的硬體裝置都看成檔案,和裝置的互動其實就是讀寫檔案,也就是資料流動。這樣開發驅動不僅簡單實用,並且使用者也用一致的介面訪問硬體,大大降低了學習代價。但是在.NET Micro Framework平台下,卻沒有提供這樣的驅動開發介面,使用者如果想在應用程式層操作硬體,必須要做一個專門的介面庫(Interop),如果有n個裝置,對應的驅動介面庫檔案也必須n個,如果一個應用程式和n個裝置通訊,那就必須引用n個庫了。另外如果庫介面有更改,那麼上層和底層代碼還必須重新編譯才能使用。
正是基於流式驅動的一些優點和Interop驅動介面開發的繁雜,所以我在.NET Micro Framework系統上構建了一套流式驅動架構。尤為值得一提的是,在流式驅動架構的基礎上,還實現了的使用者可以在MDK IDE環境下,採用C++開發流式驅動(參見相關文章《.NET Micro Framework動態調用C/C++底層代碼》)。
流式驅動應用程式層的C#介面代碼如下:
public sealed class GeneralStream { publicGeneralStream(); public event GeneralStreamEventHandlerNotice; public int Close(); public int IOControl(intcode); public int IOControl(intcode, int parameter); public int IOControl(intcode, byte[] inBuffer, intinCount, byte[] outBuffer, int outCount); public int Open(stringname); public int Open(string name,int config); public int Open(string name,string config); public int Read(byte[]buffer, int offset, intcount); public int Write(byte[]buffer, int offset, intcount); }
以上介面其實和WinCE平台下的流式介面非常類似了,但是比較有特色的是,還提供了一個事件通知介面,這樣就為各種硬體驅動開發提供了更靈活的支援。有了這個流式介面,一般情況下,為上層C#語言提供專有的硬體底層功能,就不需要再編寫介面相關的代碼了,直接寫相關的C/C++代碼,然後編譯連結即可。
當前已經基於流式驅動介面,實現了10個裝置和功能模組的驅動,下面先簡單介紹一下,後續將詳細寫文章一一介紹。
序號 |
名稱 |
說明 |
備忘 |
000 |
UserDriver |
使用者流式驅動開發介面 |
MDK下的C++開發 |
001 |
Watchdog |
看門狗驅動 |
|
002 |
Ultrasonic |
超聲波模組驅動 |
測距 |
003 |
DHT11 |
溫濕度模組驅動 |
|
004 |
GPIO |
GPIO特殊功能驅動 |
比如可以配置開漏 |
005 |
Counter |
高速計數器 |
|
006 |
ADIS16227 |
ADIS16227模組驅動 |
基於特殊的SPI介面 |
007 |
MAX7219 |
MAX71219晶片驅動 |
LED和點陣控制 |
008 |
PCD8544 |
Norkia5110顯示模組驅動 |
|
009 |
LCD1602 |
LCD1602模組驅動 |
|
在開發ADIS16227、Norkia5110和LCD1602模組驅動的過程中,深切感受到,給使用者留一個C++驅動開發介面非常重要,因為這類驅動,上層應用一是沒有現成的介面,二是直接用C#是不能實現的,所以必須底層移植,如果沒有現成使用者介面,就必須依賴廠商了,這很大層度上限制了使用者的開發的主動性和靈活性,還有對產品及項目的把控性。
關於這部分內容,我在使用者流式驅動開發介面(UserDriver)的文章中會詳細介紹。
-----------------------------------------------------------
MF簡介:http://blog.csdn.net/yefanqiu/article/details/5711770
MF資料:http://www.sky-walker.com.cn/News.asp?Id=25