QSerialPort连续读取累积延迟
QSerialPort continuous reading accumulative delay
我正在尝试从QT应用程序到Arduino进行通信。流程是这样的:QT应用程序发送一个"1",Arduino预计会用一些数据响应(数据字符串长度很大,大约为300(。QT应用程序以大约5Hz(每200ms(的速率发送"1"。
我面临的问题是,在Arduino到QT的通信之间存在累积延迟。也就是说,我从Arduino收到的数据不是最近的数据,但Arduino的数据频率仅为5Hz(正如预期的那样(,只是来的数据不是最新的。这种延迟随着时间的推移而不断增加。我认为缓冲区或其他方面有问题。
我尝试过的:
QSerialPort serialPort;
是我的设备端口
serialPort.clear()
serialPort.flush()
- 从两端增加和减少波特率
- 从Arduino减少字符长度,这里的延迟显著减少,但在长时间后会观察到累积的延迟
以清除串行通信缓冲区,但问题仍然存在。
这是我的代码片段:
connect(timer_getdat, SIGNAL(timeout()), this, SLOT(Rec()));
timer_getdat->start(200);
其中CCD_ 4是我做通信部分的函数。
在Rec()
:中
serialPort.write("1", 2);
// serialPort.waitForBytesWritten(100);
long long bytes_available = serialPort.bytesAvailable();
if (bytes_available >= 1)
{
serialPort.readLine(temp, 500);
serialPort.flush(); // no change
serialPort.clear(); // no change by .clear() also
}
我在这个问题上纠缠了很长时间。上面的代码片段是我认为必要的,但如果有人需要更多的澄清,我可能会透露更多的代码。
我也遇到了同样的问题,是的,QSerialPort.clear()
和QSerialPort.flush()
没有帮助。尝试执行readAll()
因此,将Rec((函数中的部分更改为以下内容:
serialPort.write("1", 2);
long long bytes_available = serialPort.bytesAvailable();
if (bytes_available >= 1)
{
serialPort.readLine(temp, 500);
serialPort.readAll(); // This reads all the data in buffer at once and clears the queue.
}
即使在QT论坛上,我也没有找到答案,只是在玩QSerialPort类和readAll((的所有可用函数。
关于readAll()
,Qt文档中写道:
从设备读取所有剩余数据,并将其作为字节返回大堆
我对分辨率的解释是readAll从通信缓冲区捕获所有数据并清空它。
这应该是clear()
功能的工作,但显然readAll()
似乎起作用了。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 使用新行和不使用新行读取文件
- 读取文件并输入到矢量中
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 无法找到/读取配置文件.conf-FileIOException
- 如何仅为一个函数添加延迟
- 如何使用Luacneneneba API正确读取字符串和表参数
- C++将文本文件中的数据读取到结构数组中
- 正在将csv文件读取为双精度矢量
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 为什么在读取文件大小时文件IO速度会发生变化
- 正在读取二进制文件(is_open)
- 如何在c++中从文本文件中逐行读取整数
- QSerialPort连续读取累积延迟
- 使用tserial.cpp驱动程序读取COM端口时的延迟
- 读取和写入 HLSL 5.0 中的纹理(延迟着色)
- 字节间延迟时间的读取文件超时
- UDP数据读取不正确(延迟)