Я пишу программу для чтения из QSerialPort. Похоже, что программа работает примерно в 85% случаев, однако возникает странная ситуация, когда глупость считывается в мой буфер.QSerialPort: неверные значения
Иногда программа неожиданно выходит из строя при запуске из-за массивного буфера значений x00. Это не ответ от моего модуля, и ТОЛЬКО, кажется, случается иногда при запуске.
Я думаю, что есть проблема в том, как я удаляю свой экземпляр QSerialPort, но не могу найти его.
Я также заметил, что у QSerialPort есть функция «sendBreak», которая, кажется, делает то, что моя программа (отправка массивного пара x00/x00/x00).
Мой вопрос: кто-нибудь сталкивался с этим раньше? Есть ли какая-то странная возможность, моя функция QSerialPort :: read() каким-то образом выполняет «sendBreak»? Или это более вероятно, будет проблемой с удалением экземпляров/указателей (чтение данных с адреса, который не был деконструирован должным образом)?
Constructor:
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));
Destructor:
serial->clear(QSerialPort::AllDirections);
serial->close();
delete serial;
Я понимаю, что это может быть довольно общий вопрос, но я в настоящее время не может найти проблему так любая помощь будет оценена по достоинству.
Многие вещи могут ошибаться. Вы проверяете перед первым чтением, открыт ли последовательный порт? Вы используете waitForReadyRead? –
Отправка NULL и «перерыв» не совпадают. «Разрыв» - это когда линия переходит в ноль в течение некоторого длительного периода времени (более нескольких символов). В перерыве нет начальных бит, поэтому получатель не должен видеть никаких символов, даже NULL. Чтобы увидеть строку символов NULL, каждому символу потребуется связанный бит начала. Шум (проявленный как ложные стартовые биты) может вызвать вашу проблему или проблему с драйвером последовательного порта, или другой конец действительно может посылать строку из NULL. – Mark
Я использую readyRead(), чтобы знать, когда читать с порта, но не используя waitForReadyRead().Я не проверяю, открыт ли первый последовательный порт, однако я получаю сообщение об ошибке, если оно не открыто (чего я не получаю). Спасибо за информацию о перерыве, не поняли операцию. У меня, похоже, нет проблемы с драйвером, о которой я могу сказать, и модуль не должен отправлять этот пара данных (связавшись с производителем по этому поводу). После этих комментариев я склонен думать, что это может быть проблема readRead() ... Я слышал, что это может быть проблематично. – SamMetix