WinCE內核動(dòng)態(tài)加載GPIO端口驅動(dòng)的設計方法
2.2 具體實(shí)現步驟
在WinCE中,主要通過(guò)RegisterDevice和Deregister Device兩個(gè)函數實(shí)現WinCE內核對GPIO端口驅動(dòng)的動(dòng)態(tài)加載和卸載,其中Register Device函數負責加載設備驅動(dòng),DeregisterDevice函數負責卸載設備驅動(dòng)。在程序設計時(shí),端口驅動(dòng)程序的開(kāi)發(fā)仍然采用流驅動(dòng)的設計方式,但編譯環(huán)境使用Visual Studio。生成驅動(dòng)動(dòng)態(tài)鏈接庫文件后將其部署在開(kāi)發(fā)板適當的路徑下,然后在WinCE程序中動(dòng)態(tài)加載(卸載)該dll文件。筆者使用飛凌S3C2440開(kāi)發(fā)板,創(chuàng )建了一個(gè)WincE對話(huà)框程序,通過(guò)點(diǎn)擊相關(guān)按鈕可以實(shí)現加載(卸載)GPIO端口驅動(dòng)、點(diǎn)亮(熄滅)LED燈。圖1是本程序的運行界面。本文引用地址:http://dyxdggzs.com/article/170445.htm
相關(guān)的要點(diǎn)代碼及解釋如下(暫不考慮程序的異常處理)。
(1)端口驅動(dòng)動(dòng)態(tài)鏈接庫的創(chuàng )建及生成
使用Visual Studio編譯環(huán)境創(chuàng )建一個(gè)常規的動(dòng)態(tài)鏈接庫工程,并編譯生成dll文件即可。具體代碼這里不再給出。需要注意的是,在動(dòng)態(tài)鏈接庫工程的.cpp文件中,驅動(dòng)的編寫(xiě)需要嚴格遵循流驅動(dòng)定義的接口標準。在本程序中,流驅動(dòng)的前綴名為GPI,生成的動(dòng)態(tài)鏈接庫文件名為GPI.dll。
(2)端口驅動(dòng)動(dòng)態(tài)鏈接庫的注冊及加載
調用RegisterDevice函數后,即將步驟1中生成的動(dòng)態(tài)鏈接庫文件注冊到注冊表中,并加載進(jìn)WinCE內核。在使用該函數時(shí)需要注意,在WinCE應用程序中需要獲取該驅動(dòng)動(dòng)態(tài)鏈接庫文件的絕對路徑。因此,開(kāi)發(fā)者在部署WinCE應用程序和端口驅動(dòng)動(dòng)態(tài)鏈接庫時(shí),需要注意兩者之間的位置關(guān)系,一般情況下,將兩者部署在同一路徑下即可。驅動(dòng)程序動(dòng)態(tài)鏈接庫的注冊及加載代碼如下:
(3)端口訪(fǎng)問(wèn)
端口訪(fǎng)問(wèn)的方式與常規方式一致,根據需要調用CreateFile、WriteFile、ReadFile等函數即可,相關(guān)代碼這里不再給出。
(4)端口驅動(dòng)動(dòng)態(tài)鏈接庫的卸載
當不需要該設備驅動(dòng)時(shí),調用DeregisterDevice函數即可實(shí)現對動(dòng)態(tài)鏈接庫dll文件的卸載。如果程序再次需要該設備驅動(dòng)時(shí),按照步驟2再次加載設備驅動(dòng)即可。
2.3 設計方法的優(yōu)點(diǎn)
在WinCE內核動(dòng)態(tài)加載GPIO端口驅動(dòng)的設計方法中,內核調用端口驅動(dòng)的方式比較靈活,GPIO端口驅動(dòng)文件是通過(guò)相關(guān)WinCE API直接注冊和調用的,整個(gè)開(kāi)發(fā)過(guò)程不再涉及Platform Builder編譯環(huán)境的使用。開(kāi)發(fā)者只需要將注意力集中在Visual Studio創(chuàng )建端口驅動(dòng)文件和WinCE應用程序的開(kāi)發(fā)上,對驅動(dòng)程序的修改和調試都獨立于WinCE內核,而且在實(shí)際的使用中,端口驅動(dòng)程序、WinCE內核和WinCE應用程序各自獨立,便于各功能模塊的獨立開(kāi)發(fā)和調試。
結語(yǔ)
本文介紹了基于A(yíng)RM+WinCE進(jìn)行項目開(kāi)發(fā)過(guò)程中動(dòng)態(tài)加載GPIO端口驅動(dòng)程序的設計方法,較好地避開(kāi)了對Platform Builder編譯環(huán)境的使用,能夠替代常用的基于流驅動(dòng)的驅動(dòng)程序的設計方法。筆者在工程項目中驗證了這兩種設計方法,實(shí)際可行且快捷有效,對于其他ARM類(lèi)的GPIO驅動(dòng)程序開(kāi)發(fā),具有一定的借鑒意義。
評論