阅读:875回复:4
老问题,还是系统排队的IRP方式的问题
最近在硬件上调试 写好的ISA的NT试的驱动,用DS写的,应用程序发METHOD_IN_DIRECTD方式的DEVICEIOCTL给驱动,采用异步方式,在驱动对应的分发例程里,往端口写数据,可是发现有时候我写往端口的数据经常发生重复,也就是在应用层两次传下来的数据是一致的,我怀疑是异步方式的错误,因为异步方式,IRP被排进队列,应用程序处理输出缓冲区太快,驱动层还没把缓冲区的数据写给端口的时候,应用程序把原来的数据给覆盖了。我成了同步的方式,就不出现这个问题了,但同步方式,速率明显就降了下来,难道异步方式就不能用吗?
|
|
|
沙发#
发布于:2003-08-14 19:55
难道没人会这个问题吗?很着急啊!
|
|
|
板凳#
发布于:2003-08-14 20:00
用户被禁言,该主题自动屏蔽! |
|
地板#
发布于:2003-08-15 08:36
同步没有做好吧? 你是说使用异步方式的时候,驱动没有和应用同步好? 应用不是我写的,据他讲,应用中GREATFILE里和DEVICEIOCTL里的最后一个参数分别用了OVERLAPPED指针结构。 我是用DS写的驱动,采用系统排队的方式,在驱动里接收到应用传下来的IRP后,排队,然后进入STARTIO例程,然后进入SERIAL,串行化处理例程,但不知道为什么我发给端口的数据有时候两次是重复的。 |
|
|
地下室#
发布于:2003-08-15 11:19
很奇怪,问题更怪了,我的硬件是这样的,主板是研华公司的PCM3350,CPU主频233M,128内存,20G的笔记本硬盘,PC104(ISA)总线,应用程序调用METHOD_IN_DIRECT的异步方式和驱动通信,应用每次传给驱动的数据大小是24K,驱动把这些数据写往板子上的FIFO,FIFO大小是32K,出现了以下奇怪的问题:
1。应用两次调用驱动,写给驱动的数据是不一样的,但驱动写给FIFO的数据两次确实完全一样的,也就是下一个IRP来的数据把上次IRP里的数据给覆盖了。 2。用逻辑分析仪捕捉,驱动写给FIFO的两次数据块之间的空闲时间居然有1.78S,也就是应用把数据传给驱动的速度很慢! 谁能帮帮我,这是怎么回事?? |
|
|