QSerialPort:读取的值不正确
QSerialPort: Reading incorrect values
我正在编写一个从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(),它在不实例化数组的情况下清除数组。因此,当我在读取(但未初始化)之前清除它时,它正在读取地址。
- C++ 读取文件读取文件不正确
- C++:读取字符是不正确的
- 读取来自提升binary_iarchive不正确的数据
- 使用 c++ 时从二进制文件中读取 int 不正确
- 为什么当我使用双精度时,Qt<->Matlab 正确写入和读取我的字节,但存储 uint32 的字节不正确?
- 尝试使用 ifstream 读取数据后显示不正确的数字
- 结构C++ – 从文件中读取不正确
- 结束标记 xml 验证在提升 ptree 读取 xml 中不正确
- 为什么我的getline不正确读取.csv文件
- 逐行从文件读取到矢量对于<T>二进制数据C++不正确
- 从堆栈中读取字符后,如何修复不正确的文件输出
- 读取PPM文件并使用Opengl和c++进行显示.颜色不正确
- 写入和读取 bin 文件数据不正确
- boost::local_time 读取不正确的iso_extended_format
- 从 matlab 中的二进制文件读取不正确
- 读取并显示文件,但输出不正确
- c++的新功能,scanf不能正确读取/打印输入
- 文件不能正确读取c++ ifstream
- 不正确的输入和读取
- UDP数据读取不正确(延迟)