首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

wince流接口驱动LED

wince流接口驱动LED

流式接口驱动程序就是系统提供了一组相同的接口,并导出一组相同的函数,通过修改这些函数达到底层硬件的驱动,称为流式驱动(个人定义欢迎拍砖)。以下描述均已I/O驱动为例说明。           建立流式驱动需要在BSP的\Src\Drivers目录下建立一个文件夹存放4个文件,它们分别是.cpp文件、.def文件、Makefile(无扩展名)文件、source(无扩展名)文件。其中.cpp文件主要实现:驱动程序地址空间的分配、动态链接库的入口设置、12个外部入口函数的设置等;.def文件主要是声明需要输出的接口函数;Makefile和source是为仿造wince下的driver架构而建立的文件。各个具体函数功能请参看代码注释。在建立以上文件后,还需在Platform.reg文件中注册这个驱动的信息。内容如下[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\GPIODriver]
"Prefix"="GIO"                   //声明驱动名称
"Index"=dword:1               
"Dll"="GPIODriver.dll"    //动态链接库文件
        到此驱动函数基本上完成了,之后的工作就是VS2005创建一些控制界面以及调用这些函数而已。那么对于一些习惯性写单片机程序的人,可能会有些疑问,在操作I/O时应该需要修改一些寄存器,为什么以上函数代码均没有做这方面的工作呢?其实寄存器的地址,以及地址映射在BSP中的.inc文件均有定义。在wince是不用知道这些底层硬件的具体内容,它们对于wince来说就相当一个文件而已。但本质上来说跟编写单片机程序操作I/O的原理是一样的,都是将I/O口控制为输出,在对数据寄存器赋值,只是wince下编程有人给我们做了一部分工作而已,其实就驱动而言,自己直接操作物理地址实现驱动会更易于理解和简单。

        接下来在VS2005建立工程文件,添加相应的按钮。在按钮单击事件函数中添加如下代码
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;
各个函数的原型及功能均可以在网上收索到,在此不做解释(可以在工程文件中看到说明,但由于SDK的不同可能在其他的VS2005的编译器下加载不成功,或者编译不成功)接着就是编译运行了,到此大功告成!
继承事业,薪火相传
返回列表