本人现在做了一个软件,主要有串口通讯的功能,其中读写串口的操作都放在单独线程中,根据事先规定的协议通过帧头判断一帧的开始,可能会有连帧。本人直接用API函数实现的串口读写功能,利用WaitCommEvent来得知串口是否有数据到达,然后可获取串口数据的长度,一般情况下可以正常收到想要的数据,但是这段时间发现,当数据有连帧且每帧数据较长时,并不能一次全部获取,比如30个字节数据,可能会分成25,5或13,17或24,6或21,9等组合的形式两次获取,但是我的程序并不能处理这样的数据,因为我并不知道会有几个连帧,每帧长度也不定,我只能做到一旦有数据到达,我就获取,并且从此次获取的数据中找到有几帧然后再作处理,处理完后就会清空此次数据。因此当以上问题出现时,就会至少丢掉一帧数据。通过观察,被丢的数据与上次或下次到达的数据合起来正好是正确的一帧。请问高手们,谁有这方面的经验,给小弟我指点指点,是不是有哪个地方疏忽了?急呀!!!!!!谢了!!!!!!!!
在缓存里找分帧标记,找到后,当前位置之前的为一帧,交上层处理数据,从缓冲中清除当前位置之前的数据;剩下的接着找分帧标记,找到一帧交一帧,直到找不到,剩下的即为最后一帧的前部分;
下次再来数据,拼在后面,从头再找分帧标记,找到一帧交一帧,如此一直处理下去。错不了的,相信我,呵呵。