|
一个串口设备每隔一定的时间产生一定的数据 如果我用计时器每个相同的时间读取串口的数据,有可能每次得到的数据都只是 设备产生数据的一部分,也就破坏了完整性,那样读入的数据也就没有意义了 这样的话,怎么才能重串口读取有效的数据那 用API |
|
|
|
我用VC作过你说的这样的程序!我把我的思路告诉你!
串口传上来的数据,应该可以知道什么时候结束,比如说判断上传的数据的校验,结束标志,数据长度等等! 这样你就可以在接收到数据时判断一下数据是否完全了!如果接收不完全,把数据存储在数组,再进行下一次的接收,直到接收完全就可以了.当然也可能出现其他的错误,这要自己处理了哦! 要是无法判断数据是否结束,我的办法就是让读取数据的延时足够长,保证接收完全吧! 哈哈,第一次给人家回答问题,不对的地方多多指教哦! |
|
|
对串口的数据间隔时间设置一个合理的值,这样串口数据包发送间隔时间超过这个时间时串口缓冲区内才能取得数据,你的定时器间隔要更短一些,不然会丢失数据……不过我建议采用线程方案除非你的数据量非常小并且实时性很低……
DCB Dcb; GetCommState(hCommDevice,&Dcb); Dcb.BaudRate=9600;// Dcb.ByteSize=8; Dcb.Parity=NOPARITY; Dcb.StopBits=ONESTOPBIT; Dcb.fDtrControl=0; SetCommState(hCommDevice,&Dcb); COMMTIMEOUTS Timeouts; GetCommTimeouts(hCommDevice,&Timeouts); Timeouts.ReadIntervalTimeout=500;//数据间隔时间 Timeouts.ReadTotalTimeoutMultiplier=0; Timeouts.ReadTotalTimeoutConstant=0; SetCommTimeouts(hCommDevice,&Timeouts); EscapeCommFunction(hCommDevice,SETDTR|SETRTS); |
|