我已经编写了一个使用QSerialport写入串行设备的工具。它运行一定时间,直到我收到以下错误消息:
断言:" bytestransferred == writechunkbuffer.size()" qSerialport_win.cpp,第511行
我的发送功能看起来像这样:
/**
* @brief Send text to device
* @param text
* @return Success/Fail
*/
bool Serial::send(QString text)
{
if (connectionStatus && qsp.isWritable()) {
QByteArray buffer = text.toLatin1();
if (buffer.size() != qsp.write(buffer))
qDebug() << "Send does not work";
qsp.flush();
msleep(15);
return true;
} else {
return false;
}
}
如果我正确理解它,我将文本(大约20个字符)带到设备上,等待15ms,然后重复。我真的不明白为什么会收到此消息?
//编辑:
一段时间后,我弄清楚了问题所在。我忘了提到,为什么我等待15毫秒。那是文档的一部分,要等我发送数据后等待。与发送数据有关的最大问题是,我在单独的线程中运行QSerialport。通过使用该问题,我遇到了麻烦。我将其移至主要线程,并使用QT的信号插槽设计。
不知道您使用的API或它的工作原理,没有固有的理由write()
方法应传输所有提供的数据,尤其是返回写入计数:明确的信号表明它可能不会一次转移所有内容。
唯一的问题是断言本身。您应该 loop ,直到编写数据为止,不要假设它们全部写在单个写作中。您也不应该在写作之间睡觉,徒劳地尝试超越您发送的设备。这实际上只是浪费时间。