通信模块固件结构如图4所示。主循环和中断服务程序之间的数据交换可通过事件标志和数据缓冲实现。图3中USB中断引脚INT_N发出中断请求,中断服务程序根据中断请求类型操作,设置事件和填充数据缓冲区再传输给主循环;标准设备请求程序是对标准请求进行处理;用户可以根据实际需要编写厂商请求,例如发出启动或停止
数据采集命令。
点击看原图

2.4.2 驱动程序设计 驱动开发工具有DDK和第三方开发工具。其中DDK开发难度最大,第三方开发工具有DriverStudio和Windriver等。DriverStudio难度适中,而Windriver则属于应用层驱动开发,难度小,但效率低,并存在发布问题。
DDK驱动程序开发工作包括:开发环境设
置(VC编译环境)[5]、驱动程序设计[6]、安装文件(INF文件)设计。 驱动程序设计采用WDM(Windows Drive Mode)。WDM设备驱动程序提供了一个参考框架,大大降低了由DDK书写驱动程序带来的难度。
D12驱动使用的例程包括:DriverEntry、AddDevice、DispatchPnp、DispatchRead、DispatchWrite和DispatchDeviceControl例程, 以下是D12的WDM驱动程序函数:
DriverObject->MajorFunction[IRP_MJ_CREATE] = D12_Create;
DriverObject->MajorFunction[IRP_MJ_CLOSE] = D12_Close;
DriverObject->DriverUnload = D12_Unload;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL;
=D12_ProcessIOCTL;
DriverObject->MajorFunction[IRP_MJ_WRITE] = D12_Write;
DriverObject->MajorFunction[IRP_MJ_READ] = D12_Read;
DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL;
DriverObject->MajorFunction[IRP_MJ_PNP]=D12_Dispatch;
DriverObject->MajorFunction[IRP_MJ_POWER]=D12_Process-PowerIrp;
DriverObject->DriverExtension->AddDevice=D12_PnPAddDevice。