基于S3C2440的WindML圖形驅動設計
WindML通過事件機制完成對鍵盤輸入的響應。它采用客戶/服務器模式,其事件驅動的原理如圖4所示。
WindML輸入驅動是一個分層結構,包括一個底層的驅動,負責處理設備控制器和一個高層的驅動,還負責翻譯從設備中接收到的原始數據。
底層輸入驅動是作為I/O驅動來開發(fā)的,一般構建進入系統(tǒng)內核,底層驅動在初始化時就會被連接到操作系統(tǒng)的I/O系統(tǒng)中。底層驅動負責完成以下功能:
初始化設備控制器和輸入設備;
處理由設備控制器產生的中斷;
從輸入設備中接收原始數據,把它們按序地排列在I/O系統(tǒng)的高端驅動隊列中;
接收高層驅動的指令并做出相應的反應,如控制鍵盤上LED的亮滅。
此外,底層輸入驅動必須支持輸入服務任務用于檢測輸入數據的Select()機制。
高層輸入驅動主要負責接收來自低層輸入驅動的原始數據,處理這些數據,封裝數據成為一個輸入事件消息以及把這些消息放到消息隊列中。在實現時需要完成以下例程:
(1)驅動打開例程。分配并初始化驅動控制結構,打開底層輸入驅動,設置底層驅動到合適模式,以及當成功打開驅動后返回一個指向驅動結構的指針。
函數原型如下:
驅動打開例程有兩個參數,第一個參數是用于接收原始輸入數據,被驅動打開的底層輸入驅動的名字;第二個參數是一個指向輸入驅動結構(UGL_INPUT_DEV)的指針。
(2)驅動控制例程。
函數原型如下:
該函數有3個參數:第一個參數是由驅動打開例程創(chuàng)建和初始化的驅動控制結構;第二個參數是請求的類型;第三個參數依賴于第二個參數的請求類型。
(3)開發(fā)驅動關閉例程。該函數負責完成關閉底層輸入驅動,釋放由打開例程分配的系統(tǒng)資源以及設置底層設備回到它操作之前的原始狀態(tài)。
最后需實現I2C總線接口驅動,將底端輸入驅動及高端輸入驅動連接起來,完成鍵盤驅動程序的編寫。
圖5所示是WindML繪圖的一個例子。圖中創(chuàng)建了2個窗口,左邊的窗口通過鍵盤可以控制小球的運動,右邊窗口可以在其中輸入文字。本文引用地址:http://www.ex-cimer.com/article/151420.htm
4 結語
本文對嵌入式實時操作系統(tǒng)VxWorks的媒體庫windML及其圖形界面開發(fā)的方法做了詳細的介紹,上面提到的圖形界面開發(fā)的方法已經被作者成功地應用于實際工程開發(fā),并取得了良好的效果。
評論