基于Windows CE的SPI接口驅動程序及與應用程序交互的設計
需要說明的是,在本程序中使用了CEDDK中MmMapIoSpace庫函數,故另需在頭文件中添加#include和#pragma comment(lib,ceddk.lib)。至此,g_SPIReg在其他的驅動實現函數中就可以調用,直接讀寫其指向的寄存器的代碼即可完成相關的操作。還需要實現的函數有:SPI_Deinit、SPI_Read、SPI_write、SPI_Seek、SPI_Open、SPI_Close、SPI_IOCntrol。限于篇幅,本文僅給出驅動初始化的代碼。
3.3 驅動與應用程序的通信設計
在Windows CE中,用戶模式下每個進程與其他進程所占有的內存空間被虛擬內存機制隔離,進程間無法實現直接互訪。在驅動程序和應用程序通信過程中,驅動程序位于device.exe的進程空間中,由于上述原因,驅動程序向應用程序發(fā)起的單向通信存在困難。通常的解決方法是在內核空間中共享同步對象,建立消息隊列或者通過指針映射來完成。上述方法都無法回避進程間的數據復制過程,因而只適用于少量的數據傳輸。對于大量的數據或者實時性要求較高的情況,可以在虛擬地址為Ox4200 0000~0x7fff ffff的空間中建立命名的內存映射來實現內存共享,從而能夠避免數據在進程空間中的復制。相關的API為CreateFileMapping和MapView()fFile。
3.4 驅動程序的封裝和安裝
驅動接口函數編寫完后將其接口以dll的形式導出,再編寫一個簡單的注冊表文件,指明驅動安裝的路徑、前綴以及索引。至此驅動程序設計工作就完成了,將驅動及注冊表添加到當前的平臺中即可。
結 語
本文詳細介紹了Platform Builder下SPI接口驅動程序設計以及驅動程序同應用程序交互的實現。驅動例程已經成功地應用于基于nRF2401的嵌入式系統(tǒng)無線通信當中,具有很高的參考價值。 本文引用地址:http://m.butianyuan.cn/article/149152.htm
評論