微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > 嵌入式系统设计讨论 > wince流接口驱动LED

wince流接口驱动LED

时间:10-02 整理:3721RD 点击:
         流式接口驱动程序就是系统提供了一组相同的接口,并导出一组相同的函数,通过修改这些函数达到底层硬件的驱动,称为流式驱动(个人定义欢迎拍砖)。以下描述均已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的编译器下加载不成功,或者编译不成功)接着就是编译运行了,到此大功告成!

学习             

能做个截图或视频吗

小编很强悍,学习了。
我有一个问题想请教一下小编:
我的环境:S3C2440(英飞凌的开发板)+VS2005,我在自己订制WinCE内核后,总是编译不成功,困扰我很久了,一直没有成功过。
请问小编有没有自己订制过WinCE的操作系统?能交流一下你的心得吗?在此特别感谢!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top