QSerialPort:读取的值不正确

QSerialPort: Reading incorrect values

本文关键字:不正确 读取 QSerialPort      更新时间:2023-10-16

我正在编写一个从QSerialPort读取的程序。该程序似乎在85%的时间内都能工作,但出现了一种奇怪的情况,在这种情况下,我的缓冲区中读取了一些废话。

有时,由于x00值的巨大缓冲区,程序在启动时意外崩溃。这不是我的模块的响应,而且似乎只是在启动时偶尔发生。

我认为我删除QSerialPort实例的方式有问题,但似乎找不到它。

我还注意到QSerialPort有一个函数"sendBreak",它似乎在做我的程序(发送x00/x00/x00的大量蒸汽)。

我的问题是:以前有人遇到过这种情况吗?是否存在某种奇怪的可能性,我的QSerialPort::read()函数正在以某种方式执行"sendBreak"?或者,这看起来更可能是删除实例/指针(从未正确解析的地址读取数据)的问题吗?

施工单位:

 serial = new QSerialPort;
    serial->setPortName("/dev/ttyUSB0");
    serial->setBaudRate(QSerialPort::Baud9600); // 9600
    serial->setDataBits(QSerialPort::Data8);
    serial->setParity(QSerialPort::NoParity);
    serial->setStopBits(QSerialPort::OneStop);
    serial->setFlowControl(QSerialPort::NoFlowControl);
    serial->open(QSerialPort::ReadWrite);
    serial->clear(QSerialPort::AllDirections);

读取端口:

readData.append(serial->read(50));

破坏者:

serial->clear(QSerialPort::AllDirections);
serial->close();
delete serial;

我意识到这可能是一个很普通的问题,但我目前找不到问题所在,所以我们将不胜感激。

好吧,值得一提的是,我发现了这个问题。

在重新阅读了QSerialPort上的Qt文档,特别是read()函数后,它说:

此函数无法报告错误;返回一个空的QByteArray可能意味着当前没有可供读取的数据,或者发生了错误

似乎发生的事情是,即使我没有要读取的数据,我的readyRead()信号也会被触发?!在readPort方法中检查bytesAvailable()的简单if语句意味着我只有在有数据等待读取时才进行读取。

我很惊讶这个函数无论如何都能读取,我觉得这个问题本可以得到更好的强调/处理。。。。

编辑:发现了这个问题的真正问题。我使用的是readData.resize(),它在不实例化数组的情况下清除数组。因此,当我在读取(但未初始化)之前清除它时,它正在读取地址。