如何开发一个WinCE 6的流设备驱动

  • 在BSP的Drivers目录下,创建新驱动程序的目录,比如MyDriver

 

  • 修改dirs文件,在变量DIRS中增加新目录MyDriver

 

  • 创建文件Sources,内容如下:

 

  • 创建文件Makefile.inc,内容如下:

 

  • 创建文件MyDriver.def,内容如下:

 

  • 创建文件MyDriver.c,内容如下:

 

 

  • 在platform.bib或者project.bib中,加入此驱动:

 

  • 在platform.reg或者project.reg中,设置此驱动为BuildIn类型,自动加载:

 

 

至此,一个没有实现任何功能的驱动完成了,下面描述如何在驱动中使用中断。

 

 

  • 创建中断线程函数(IST),在线程中申请并等待中断:

 

  • 驱动Dll被加载后,系统首先调用DllEntry,随后调用XXX_Init。修改XXX_Init,加入线程启动代码:

 

 

如果驱动只需要处理一个中断,WaitForSingleObject可以处理得很好,如果有多个中断需要处理时,能依葫芦画瓢,创建多个event,每个event注册一个中断,然后使用WaitForMultipleObjects吗?很遗憾,虽然WinCE支持WaitForMultipleObjects,但对于注册到中断的event,只允许等待一个,考虑到中断处理程序所要求的高性能,为了避免进入死锁,当event数目大于1时,WaitForMultipleObjects将会失败,GetLastError返回参数无效的错误代码(是的,如果只有一个event,WaitForMultipleObjects仍然会成功)。

 

在这种情况下,一种解决方法是,创建多个IST,每个IST处理一个中断。

 

此外,还有另一种更好的方法,就是把同一个event注册到多个中断,然后使用WaitForSingleObject等待此event,每个中断被触发时,event都会获得信号:

 

 

(参考了Bruce Eitman的文章,http://geekswithblogs.net/BruceEitman/Default.aspx)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值