阅读:2351回复:7
串口读取不返回超时问题!!!!!!!!!!
不知道是不是我愚昧,在对串口读数据时,哪怕串口上什么也没有连接,读取函数也返回成功,而不返回超时(我事先设置读超时,而且成功)。唯一有的可疑的地方就是读取的返回值为0。我觉得特别奇怪,为什么会成功而不超时呢?
在2000和Xp下都是这样的,这难道是系统串口驱动程序的Bug? |
|
沙发#
发布于:2002-04-11 22:09
可否讲详细一点??
|
|
|
板凳#
发布于:2002-04-12 09:37
不知道是不是我愚昧,在对串口读数据时,哪怕串口上什么也没有连接,读取函数也返回成功,而不返回超时(我事先设置读超时,而且成功)。唯一有的可疑的地方就是读取的返回值为0。我觉得特别奇怪,为什么会成功而不超时呢? 不是,你可以看一下得到的数据,是否为随机数? 我不知道你怎么来读数据的,直接读register? 道理上如果没有数据回来,而且你也设置了timeout,应该正确的。 |
|
|
地板#
发布于:2002-04-12 09:47
我认为是这样的:你不是直接读取的串口的值,而是串口寄存器中的值,就算没有连接,寄存器中的默认值应该是0,所以你读回的当然始终是0了。
是不是超时,应该判断再一定的时间里是否读回了非0值。 |
|
|
地下室#
发布于:2002-04-12 10:44
我没有直接读串口寄存器,而是通过串口驱动程序读的。具体方法是构造一个读IRP,然后发送给串口驱动程序。我用了两种方式进行测试,无论是在驱动里面读,还是通过应用程序读,都是读成功,但返回的读取数据长度为0。按照我的理解,如果没有数据的话,读取操作的返回结果应该是 超时,而不是成功(将长度设置为零)。
|
|
5楼#
发布于:2002-04-12 20:19
我在WIN98下用ReadFile的结果和你见到一样。
查看MSDN,这应是按Synchronous读取的结果。 我想应是M$爱犯的错误之一吧. |
|
|
6楼#
发布于:2002-04-13 08:23
我没有直接读串口寄存器,而是通过串口驱动程序读的。具体方法是构造一个读IRP,然后发送给串口驱动程序。我用了两种方式进行测试,无论是在驱动里面读,还是通过应用程序读,都是读成功,但返回的读取数据长度为0。按照我的理解,如果没有数据的话,读取操作的返回结果应该是 超时,而不是成功(将长度设置为零)。 我怀疑你的irp并没有真正的发动串口 |
|
|
7楼#
发布于:2002-04-13 15:55
我的IRP确实发送到了串口驱动程序,因为在串口上接有设备时,我能够从串口上读出数据来,故这一点不用怀疑。我也不知道是什么原因,不过我不想再追究下去了。
在成功时我检查一下返回的数据长度来确定是否有数据。 有一点特别有意思,在返回成功但没有读到数据时,超时设置确实起作用了,也就是说,在等了设定的时间后,系统才返回读取成功的,并把读取的字节数设置为0。 |
|