我在写一个程序从QSerialPort读取。该程序似乎在大约85%的时间内工作,然而出现了一种奇怪的情况,在这种情况下,废话被读入我的缓冲区。QSerialPort:读取不正确的值
有时由于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;
我意识到这可能是一个相当普通的问题,但我目前还没有发现问题,以便任何帮助,将不胜感激。
许多事情都可能出错。如果串口打开,您是否在第一次读取之前检查?你在用waitForReadyRead吗? –
发送NULL和'break'不一样。 '休息'是线条在零延长的时间段内(超过几个字符时间)变为零。休息时没有开始位,所以接收者不应该看到任何字符,甚至NULL。要查看一串空字符,每个字符都需要一个关联的起始位。噪声(表现为错误的起始位)可能会导致您的问题或串口驱动程序问题,或者另一端可能确实发送了一串NULL值。 – Mark
我使用readyRead()知道何时从端口读取,但是不使用waitForReadyRead()。我没有检查串口是否首先打开,但是如果它没有打开(我没有得到),我会得到一个错误。谢谢你关于休息的信息,不了解操作。我似乎没有一个驱动程序问题,我可以说,该模块不应该发送这种数据蒸汽(联系制造商关于此)。这些评论后,我倾向于认为它可能是一个readyRead()问题...我听说它可能有问题。 – SamMetix