|
各位好,有个串口通讯的问题向大家请教!
先说一下环境:一个硬件模块,WinCE5.0操作系统(三星的设备),开发环境是WinXP下的.net平台,framework是2.0版本。采用serialPort类来进行串口操作。 硬件模块每秒出来的数据大概是10K左右,以数据包的形式发送,串口采用的波特率是115200。在XP操作系统中,进行串口读操作,启用线程去读串口数据,周期为1秒,缓冲区设为1M,一切正常,不会出现数据的丢失现象。
如果将程序移植到WinCE平台,就出现数据丢失的问题,丢失的数据是随机的。我做了以下处理:
1、通过跟踪发现,CE平台下,不能有效设置串口读缓冲区大小。将读缓冲设为2M,然后,打开串口,10秒后读串口数据,发现串口的BytesToRead属性值总是等于2047(在XP下进行过同样的测试,数据正常),所以估计CE下串口缓冲最大只有2K(个人推测,这是问题之1)。
2、通过第一步测试,将串口读缓冲设置为2K,并且改变数据读取周期,每50毫秒读取串口一次,通过跟踪串口过来的数据,发现每次读取的数据都小于1K,如果串口缓冲是采用fifo机制,那么,串口过来数据应该都取回了,数据比第一步操作全很多,但是,还会出现丢数据的情况。我怀疑是不是串口驱动的问题。
现在找不出丢数据的原因,请大家帮忙分析一下,可能会有哪些原因,导致数据的丢失?
同时,有这几个问题不解:
1、CE平台下,串口读缓冲的大小是多少,是不是和定制的CE平台有关?
2、CE平台和XP下的串口驱动有什么地方不一样?
3、串口缓冲是采用的什么机制?
|
|