基于PocketPC的CF卡驱动程序设计
达到多功能卡设计的目的。
3.2.CF卡驱动程序的实现
实现PocketPC2002的CF卡驱动,即采用EVC3.0+PocketPCSDK,在EVC里编译代码,生成DLL,然后导入到PocketPC的\Windows目录下,并添加注册表信息,实现即插即用。以上是制作驱动的完整流程[3]。
3.2.1.实现流接口驱动的标准接口(设备文件名取CFC)
A)CFC_Init
DM调用RegisterDevice或ActivateDevice进入此模块。通过XXX_Init()的返回值判断CF卡初始化是否执行成功。此模块完成以下功能:
a.初始化CF卡硬件。
b.分配资源。
c.注册回调函数,当设备状态变化,则操作系统调用此回调函数CardRegisterClient。
d.分配IO资源,调用CF卡插槽驱动接口函数实现。
e.注册中断函数,调用CardRequestIRQ()函数。
f.配置CF卡寄存器。
B)CFC_Deinit
系统DM调用此模块卸载CF卡。需要做的工作是释放申请的资源等。
C)CFC_Open
应用程序调用Createfile时进入此模块,主要是分配资源,数据结构的初始化。
D)CFC_Close
应用程调用API接口CloseHandle(hFile)进入此模块,关闭CF卡的驱动。
E)CFC_Read
应用程调用API接口ReadFile进入此模块,读取CF卡数据。
F)CFC_Write
应用程调用API接口WriteFile进入此模块,向CF卡写数据。
G)CFC_IOControl
应用层调用DeviceIoControl()进入此模块。
3.2.2.驱动中断处理
PocketPC处理中断的方法是在处理XXX_Init调用的过程中让流接口驱动程序生成一个新的线程,这个线程叫做中断服务线程(IST)。在中断发生时,OS就给IST发信号。CF卡驱动程序的IST从CardRequestIRQ函数接受信号。因为内建CF卡插槽的驱动程序得到由CF卡插槽生成的原始中断,所以PC卡驱动程序并不直接处理中断。在中断发生时,进入CardReguestIRQ指定的PC卡插槽驱动程序调用的回调函数。
3.3.应用程序与驱动交互
PocketPC对设备的操作是采用文件操作实现的。应用层可以调用以下API接口函数对设备进行操作:
Createfile():创建设备文件
ReadFile():读取设备数据
WriteFile():放送数据至设备
DeviceIOControl():其他的相关操作
CloseHandle():关闭设备文件
应用程序经由CreateFile()打开和存取CF卡驱动程序,产生一个对CF卡驱动程序中CFC_Open()的调用,驱动程序返回一个句柄,然后该句柄被常规的Win32文件功能所用,如WriteFile()和ReadFile()。调用WriteFile()和ReadFile()分别对应驱动程序的CFC_Write(),和CFC_Read()模块。最后,CloseHandle()调用驱动程序的CFC_Close()模块释放内部资源。
3.4.驱动程序的安装
驱动程序的安装并不只是一个DLL,包括需要用到的数据文件、配置文件,和添加事先定义好的注册表项[4]。以下是添加系统注册表例子:
[HKEY_LOCAL_MACHINEDriversCFC]
Dll=CFCDriver.dll
Prefix=CFC
驱动安装过程是将驱动程序“CFCDriver.dll”文件存到POCKETPC中\windows目录下,并且修改注册表,制作安装包可以采样SDK中自带的工具实现。
3结束语
本文给出了基于PocketPC的CF卡驱动程序的设计思路和程序架构,其中具体实现代码限于篇幅,不再文中赘述。基于不同硬件设计,采样相同的驱动框架和设计方法,可以制作不同的CFIO卡,实现多种功能。
- MCS-51系列单片机结构化程序设计探讨(04-20)
- 状态机在单片机程序设计中的应用(05-01)
- ARM处理器的位置无关程序设计(09-19)
- 基于分布式处理技术的物联网数据库设计(05-21)
- 模块化管理和设计(12-01)
- 马踏棋盘的实现(12-01)