專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

Wince流式接口驅(qū)動(dòng)

作者:huqin   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年04月21日   【字體:

   流式接口驅(qū)動(dòng)程序就是系統(tǒng)提供了一組相同的接口,并導(dǎo)出一組相同的函數(shù),通過(guò)修改這些函數(shù)達(dá)到底層硬件的驅(qū)動(dòng),稱為流式驅(qū)動(dòng)(個(gè)人定義歡迎拍磚)。以下描述均已I/O驅(qū)動(dòng)為例說(shuō)明。

           建立流式驅(qū)動(dòng)需要在BSP的\Src\Drivers目錄下建立一個(gè)文件夾存放4個(gè)文件,它們分別是.cpp文件、.def文件、Makefile(無(wú)擴(kuò)展名)文件、source(無(wú)擴(kuò)展名)文件。其中.cpp文件主要實(shí)現(xiàn):驅(qū)動(dòng)程序地址空間的分配、動(dòng)態(tài)鏈接庫(kù)的入口設(shè)置、12個(gè)外部入口函數(shù)的設(shè)置等;.def文件主要是聲明需要輸出的接口函數(shù);Makefile和source是為仿造wince下的driver架構(gòu)而建立的文件。各個(gè)具體函數(shù)功能請(qǐng)參看代碼注釋。在建立以上文件后,還需在Platform.reg文件中注冊(cè)這個(gè)驅(qū)動(dòng)的信息。內(nèi)容如下
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\GPIODriver]
"Prefix"="GIO"                   //聲明驅(qū)動(dòng)名稱
"Index"=dword:1                
"Dll"="GPIODriver.dll"    //動(dòng)態(tài)鏈接庫(kù)文件
        到此驅(qū)動(dòng)函數(shù)基本上完成了,之后的工作就是VS2005創(chuàng)建一些控制界面以及調(diào)用這些函數(shù)而已。那么對(duì)于一些習(xí)慣性寫單片機(jī)程序的人,可能會(huì)有些疑問(wèn),在操作I/O時(shí)應(yīng)該需要修改一些寄存器,為什么以上函數(shù)代碼均沒(méi)有做這方面的工作呢?其實(shí)寄存器的地址,以及地址映射在BSP中的.inc文件均有定義。在wince是不用知道這些底層硬件的具體內(nèi)容,它們對(duì)于wince來(lái)說(shuō)就相當(dāng)一個(gè)文件而已。但本質(zhì)上來(lái)說(shuō)跟編寫單片機(jī)程序操作I/O的原理是一樣的,都是將I/O口控制為輸出,在對(duì)數(shù)據(jù)寄存器賦值,只是wince下編程有人給我們做了一部分工作而已,其實(shí)就驅(qū)動(dòng)而言,自己直接操作物理地址實(shí)現(xiàn)驅(qū)動(dòng)會(huì)更易于理解和簡(jiǎn)單。
        接下來(lái)在VS2005建立工程文件,添加相應(yīng)的按鈕。在按鈕單擊事件函數(shù)中添加如下代碼
        HANDLE gpiodriver;
gpiodriver=CreateFile(L"GIO1:",GENERIC_READ | GENERIC_WRITE, 0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL );
 
CDC *pDC = new CClientDC(this);
CBrush brush;
DeviceIoControl(gpiodriver,IO_CTL_GPIO_1_OFF,NULL,0,NULL,0,NULL,NULL);
brush.CreateSolidBrush(RGB(0,0,0));
CBrush *pOldBrush = pDC->SelectObject(&brush);
pDC->Ellipse(50,80,70,100);
pDC->SelectObject(pOldBrush);
delete pDC;
各個(gè)函數(shù)的原型及功能均可以在網(wǎng)上收索到,在此不做解釋(可以在工程文件中看到說(shuō)明,但由于SDK的不同可能在其他的VS2005的編譯器下加載不成功,或者編譯不成功)接著就是編譯運(yùn)行了,到此大功告成!

關(guān)閉窗口

相關(guān)文章