我正在编写一个程序,以每秒250个样本(115200波特)的速度读取来自串行RN42蓝牙连接的数据流。在运行代码时,我注意到一些数据没有被丢弃而无法读取,因此变得不同步。

SerialMonitor::SerialMonitor(QObject *parent) :
    QObject(parent)
{

    // Initialization here

     DAQ = new QSerialPort(this);
     DAQ->setPortName("/dev/tty.BIOEXG-SPP");
     DAQ->setBaudRate(QSerialPort::Baud115200);
     DAQ->setDataBits(QSerialPort::Data8);
     DAQ->setParity(QSerialPort::NoParity);
     DAQ->setStopBits(QSerialPort::OneStop);
     DAQ->setFlowControl(QSerialPort::NoFlowControl);

     if (DAQ->open(QIODevice::ReadOnly)) printf("Success!\n");
     else printf("FAILED...\n");

     connect(DAQ, SIGNAL(readyRead()), this, SLOT(WriteToText()));
}

void SerialMonitor::WriteToText()
{
    while (DAQ->canReadLine()) {
        QString IncomingData = DAQ->readLine();

        // More processing here

    }
}

}

我的代码有问题吗?如果没有,是否有解决此问题的方法?这是一个EEG设备,因此每个单个数据点都至关重要。

提前致谢!

最佳答案

您已禁用所有错误检查和同步机制:

  • 奇偶校验位禁用。
  • 流控制已禁用。

  • 如果您可以控制设备上的微 Controller ,则不错的选择是实现chk机制以恢复丢失的数据。如果您的设备是黑匣子,则必须使用硬件机制来提高稳定性。使用无线通信时,可能会丢失一些数据,并且已在项目中进行了考虑。

    注意:您应该在打开之后而不是之前设置串行参数。

    10-08 08:32