Qt串口接收不完全(QSerialport)

以前在自己学习Qt串口的时候,接收不完全的时候只是做了一个最粗糙的拼接,比如:,数据接收不完全一般都是找不到有头没尾,所以我当时的处理是出现有头没尾的时候,我就再次读取将两组数据拼接在一起,如果还是错误的,我就直接将两组数据都丢弃了,从头来,这样会丢弃很多组数据,因为:

可能第一条 第二条是第一条的和第二条的 ,这样下去丢失数据比较严重,

所以后来在工作中,保证数据不丢失是一个重要的问题,所以我就弄成一个队列的信息,设置一个定时器,500ms读取一次串口的所有内容

myBa.append(port->readAll());

之后将这些数据开始分析

一条一条信息的来,先找第一个头、尾的位置,再确定第二个头的位置

  1. 没找到头但是有信息,报告错误,同时清空
  2. 有头无尾,则等待,调用port->readAll();重新确定位置,
  3. 有尾无头,直接去除到此尾部的信息
  4. 有两个头,中间无尾巴,去除前面一个头

然后将正确信息发送到数据处理函数里,并去除此条信息,再处理队列里的其他数据

你可能感兴趣的:(Qt)