idapro
驱动牛犊
驱动牛犊
  • 注册日期2002-03-13
  • 最后登录2002-06-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2351回复:7

串口读取不返回超时问题!!!!!!!!!!

楼主#
更多 发布于:2002-04-11 19:30
不知道是不是我愚昧,在对串口读数据时,哪怕串口上什么也没有连接,读取函数也返回成功,而不返回超时(我事先设置读超时,而且成功)。唯一有的可疑的地方就是读取的返回值为0。我觉得特别奇怪,为什么会成功而不超时呢?
在2000和Xp下都是这样的,这难道是系统串口驱动程序的Bug?
u_you
驱动中牛
驱动中牛
  • 注册日期2002-04-11
  • 最后登录2010-03-05
  • 粉丝0
  • 关注0
  • 积分19分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-04-11 22:09
可否讲详细一点??
狼,食肉目犬科犬属。外形和狼狗相似。 有狗的忠诚,但无狗的奴性。 [img]http://www.driverdevelop.com/forum/avatar/u_you_wolf.jpg[/img]
KungFu
驱动大牛
驱动大牛
  • 注册日期2001-09-27
  • 最后登录2008-04-08
  • 粉丝0
  • 关注0
  • 积分221分
  • 威望24点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-04-12 09:37
不知道是不是我愚昧,在对串口读数据时,哪怕串口上什么也没有连接,读取函数也返回成功,而不返回超时(我事先设置读超时,而且成功)。唯一有的可疑的地方就是读取的返回值为0。我觉得特别奇怪,为什么会成功而不超时呢?
在2000和Xp下都是这样的,这难道是系统串口驱动程序的Bug?
 

不是,你可以看一下得到的数据,是否为随机数?
我不知道你怎么来读数据的,直接读register?
道理上如果没有数据回来,而且你也设置了timeout,应该正确的。
我不写驱动好多年
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-04-12 09:47
我认为是这样的:你不是直接读取的串口的值,而是串口寄存器中的值,就算没有连接,寄存器中的默认值应该是0,所以你读回的当然始终是0了。
是不是超时,应该判断再一定的时间里是否读回了非0值。
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
idapro
驱动牛犊
驱动牛犊
  • 注册日期2002-03-13
  • 最后登录2002-06-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-04-12 10:44
我没有直接读串口寄存器,而是通过串口驱动程序读的。具体方法是构造一个读IRP,然后发送给串口驱动程序。我用了两种方式进行测试,无论是在驱动里面读,还是通过应用程序读,都是读成功,但返回的读取数据长度为0。按照我的理解,如果没有数据的话,读取操作的返回结果应该是 超时,而不是成功(将长度设置为零)。
u_you
驱动中牛
驱动中牛
  • 注册日期2002-04-11
  • 最后登录2010-03-05
  • 粉丝0
  • 关注0
  • 积分19分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-04-12 20:19
我在WIN98下用ReadFile的结果和你见到一样。
查看MSDN,这应是按Synchronous读取的结果。
我想应是M$爱犯的错误之一吧.
狼,食肉目犬科犬属。外形和狼狗相似。 有狗的忠诚,但无狗的奴性。 [img]http://www.driverdevelop.com/forum/avatar/u_you_wolf.jpg[/img]
KungFu
驱动大牛
驱动大牛
  • 注册日期2001-09-27
  • 最后登录2008-04-08
  • 粉丝0
  • 关注0
  • 积分221分
  • 威望24点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-04-13 08:23
我没有直接读串口寄存器,而是通过串口驱动程序读的。具体方法是构造一个读IRP,然后发送给串口驱动程序。我用了两种方式进行测试,无论是在驱动里面读,还是通过应用程序读,都是读成功,但返回的读取数据长度为0。按照我的理解,如果没有数据的话,读取操作的返回结果应该是 超时,而不是成功(将长度设置为零)。

我怀疑你的irp并没有真正的发动串口
我不写驱动好多年
idapro
驱动牛犊
驱动牛犊
  • 注册日期2002-03-13
  • 最后登录2002-06-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-04-13 15:55
我的IRP确实发送到了串口驱动程序,因为在串口上接有设备时,我能够从串口上读出数据来,故这一点不用怀疑。我也不知道是什么原因,不过我不想再追究下去了。
在成功时我检查一下返回的数据长度来确定是否有数据。

有一点特别有意思,在返回成功但没有读到数据时,超时设置确实起作用了,也就是说,在等了设定的时间后,系统才返回读取成功的,并把读取的字节数设置为0。
游客

返回顶部