新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > WinCE内核动态加载GPIO端口驱动的设计方法

WinCE内核动态加载GPIO端口驱动的设计方法

作者:时间:2013-08-06来源:网络收藏

2.2 具体实现步骤
中,主要通过RegisterDevice和Deregister Device两个函数实现内核对端口和卸载,其中Register Device函数负责加载设备,DeregisterDevice函数负责卸载设备。在程序设计时,端口驱动程序的开发仍然采用流驱动的设计方式,但编译环境使用Visual Studio。生成驱动动态链接库文件后将其部署在开发板适当的路径下,然后在程序中(卸载)该dll文件。笔者使用飞凌S3C2440开发板,创建了一个WincE对话框程序,通过点击相关按钮可以实现加载(卸载)端口驱动、点亮(熄灭)LED灯。图1是本程序的运行界面。

本文引用地址:http://www.eepw.com.cn/article/170445.htm

a.JPG


相关的要点代码及解释如下(暂不考虑程序的异常处理)。
(1)端口驱动动态链接库的创建及生成
使用Visual Studio编译环境创建一个常规的动态链接库工程,并编译生成dll文件即可。具体代码这里不再给出。需要注意的是,在动态链接库工程的.cpp文件中,驱动的编写需要严格遵循流驱动定义的接口标准。在本程序中,流驱动的前缀名为GPI,生成的动态链接库文件名为GPI.dll。
(2)端口驱动动态链接库的注册及加载
调用RegisterDevice函数后,即将步骤1中生成的动态链接库文件注册到注册表中,并加载进WinCE内核。在使用该函数时需要注意,在WinCE应用程序中需要获取该驱动动态链接库文件的绝对路径。因此,开发者在部署WinCE应用程序和端口驱动动态链接库时,需要注意两者之间的位置关系,一般情况下,将两者部署在同一路径下即可。驱动程序动态链接库的注册及加载代码如下:
b.JPG
(3)端口访问
端口访问的方式与常规方式一致,根据需要调用CreateFile、WriteFile、ReadFile等函数即可,相关代码这里不再给出。
(4)端口驱动动态链接库的卸载
当不需要该设备驱动时,调用DeregisterDevice函数即可实现对动态链接库dll文件的卸载。如果程序再次需要该设备驱动时,按照步骤2再次加载设备驱动即可。
2.3 设计方法的优点
在WinCE内核端口驱动的设计方法中,内核调用端口驱动的方式比较灵活,GPIO端口驱动文件是通过相关WinCE API直接注册和调用的,整个开发过程不再涉及Platform Builder编译环境的使用。开发者只需要将注意力集中在Visual Studio创建端口驱动文件和WinCE应用程序的开发上,对驱动程序的修改和调试都独立于WinCE内核,而且在实际的使用中,端口驱动程序、WinCE内核和WinCE应用程序各自独立,便于各功能模块的独立开发和调试。

结语
本文介绍了基于ARM+WinCE进行项目开发过程中动态加载GPIO端口驱动程序的设计方法,较好地避开了对Platform Builder编译环境的使用,能够替代常用的基于流驱动的驱动程序的设计方法。笔者在工程项目中验证了这两种设计方法,实际可行且快捷有效,对于其他ARM类的GPIO驱动程序开发,具有一定的借鉴意义。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭