安装配置如下:
做串口通讯时,发现接收到的数据在32字节分包,但有时候也出现一包数据超出32字节的现象。
在网上查询给出的方案:一是给数据包添加包头包尾,二是添加延迟读取。
第一种方案给的比较多,但第二种方案却很少有明确的。
经过实践,第二种方案的实际使用方式如下比较合理:
sp->waitForReadyRead(100);
QByteArray rebytearr = sp->readAll();
int relenth = rebytearr.length();
if(relenth <= 0) return;
以上代码段放在serialRead()功能函数最开始。如果一帧数据比较长或者速率设置较低时,可相应修改等待时间。测试修改延时后,发现该延时等待会阻塞整个程序,因此可以选择使用多线程方式进行。
如果去掉判断读取长度为0的,则会如上图显示有空包。