- 在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)