(1)问题说明
程序通过串口接收字节数组,转化为各种数据。但实际应用中发现这个接收程序丢失了很多包数据。
(2)程序结构:
1.将串口类的readyRead信号连接到自定义的readData函数
connect(serial, &QSerialPort::readyRead, this, &MainWindow::readData);
2.readData函数:数据包格式为2位开始位,这个函数中使用有限状态机方法实现开始位判断。
void MainWindow::readData()
{
qDebug()<<"getmessage";
switch (data_status) {
case 0:
tempdata=serial->read(1);
memcpy(&start_flag,tempdata,1);
if(start_flag==160)
{data_status=1;//检测到第一个标志位
}
break;
case 1:
tempdata=serial->read(1);
memcpy(&start_flag,tempdata,1);
if(start_flag==161)
{data_status=2;//检测到第二个标志位
}
else
{
data_status=0;
}
break;
case 2:
if(serial->bytesAvailable()>=56)
{tempdata=serial->read(56);