libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:875回复:4

老问题,还是系统排队的IRP方式的问题

楼主#
更多 发布于:2003-08-14 15:32
最近在硬件上调试 写好的ISA的NT试的驱动,用DS写的,应用程序发METHOD_IN_DIRECTD方式的DEVICEIOCTL给驱动,采用异步方式,在驱动对应的分发例程里,往端口写数据,可是发现有时候我写往端口的数据经常发生重复,也就是在应用层两次传下来的数据是一致的,我怀疑是异步方式的错误,因为异步方式,IRP被排进队列,应用程序处理输出缓冲区太快,驱动层还没把缓冲区的数据写给端口的时候,应用程序把原来的数据给覆盖了。我成了同步的方式,就不出现这个问题了,但同步方式,速率明显就降了下来,难道异步方式就不能用吗?
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-08-14 19:55
难道没人会这个问题吗?很着急啊!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2003-08-14 20:00
用户被禁言,该主题自动屏蔽!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-08-15 08:36
同步没有做好吧?
 


你是说使用异步方式的时候,驱动没有和应用同步好?
应用不是我写的,据他讲,应用中GREATFILE里和DEVICEIOCTL里的最后一个参数分别用了OVERLAPPED指针结构。
我是用DS写的驱动,采用系统排队的方式,在驱动里接收到应用传下来的IRP后,排队,然后进入STARTIO例程,然后进入SERIAL,串行化处理例程,但不知道为什么我发给端口的数据有时候两次是重复的。
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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,也就是应用把数据传给驱动的速度很慢!

谁能帮帮我,这是怎么回事??
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
游客

返回顶部