我正在编写一个程序,以每秒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机制以恢复丢失的数据。如果您的设备是黑匣子,则必须使用硬件机制来提高稳定性。使用无线通信时,可能会丢失一些数据,并且已在项目中进行了考虑。
注意:您应该在打开之后而不是之前设置串行参数。