完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
流式接口驱动程序就是系统提供了一组相同的接口,并导出一组相同的函数,通过修改这些函数达到底层硬件的驱动,称为流式驱动(个人定义欢迎拍砖)。以下描述均已I/O驱动为例说明。 建立流式驱动需要在BSP的SrcDrivers目录下建立一个文件夹存放4个文件,它们分别是.cpp文件、.def文件、Makefile(无扩展名)文件、source(无扩展名)文件。其中.cpp文件主要实现:驱动程序地址空间的分配、动态链接库的入口设置、12个外部入口函数的设置等;.def文件主要是声明需要输出的接口函数;Makefile和source是为仿造wince下的driver架构而建立的文件。各个具体函数功能请参看代码注释。在建立以上文件后,还需在Platform.reg文件中注册这个驱动的信息。内容如下[HKEY_LOCAL_MACHINEDriversBuiltinGPIODriver]
"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的操作系统?能交流一下你的心得吗?在此特别感谢!! |
|
|
|
|
|
非科班也能玩转Android应用,体验QT跨平台能力-迅为RK3568开发板
465 浏览 0 评论
飞凌嵌入式-ELFBOARD-ELF 2硬件分享之最小系统原理
691 浏览 0 评论
1767 浏览 0 评论
Cortex-A55 处理器到底什么来头?创龙教仪一文带您了解
1030 浏览 0 评论
RK3568 + OpenCV 会碰撞出什么火花?案例详解:2-1 基于OpenCV的画线实验
756 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-13 01:58 , Processed in 0.588356 second(s), Total 42, Slave 34 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号