c++ - qextserialport 在 Windows 上丢失数据 — 我该怎么办?

标签 c++ python qt pyserial qextserialport

背景

目前,我有 TelosB motes用于收集传感器数据,然后通过 USB 串行端口以 115200 波特率传输数据。

过去,我使用Python来开发与mote交互的程序,但Python的GIL有其线程问题,只能通过不使用Python来解决(在初始测试阶段后我需要它的并发性) ,所以我转向了 C++/Qt。我在 Qt 上花了很多时间,因为我没有先验知识,学习了它的大部分最佳实践,并使一切都完美运行。除了这个问题之外的一切。

问题

当我尝试读取端口时,如果有大量数据通过,某些数据集会神秘地出错,导致我的项目丢失率高于预期。

当我使用 qextserialport 时会发生这种情况但 pySerial 不会发生这种情况.

这就是我使用qextserialport初始化端口的方法:

port.setName("COM3");
port.setQueryMode(QextSerialPort::EventDriven);
port.setBaudRate(BAUD115200);
port.setParity(PAR_NONE);
port.setDataBits(DATA_8);
port.setStopBits(STOP_1);
port.setFlowControl(FLOW_OFF);

pySerial:

port = Serial('COM3', 115200)

问题

所以我怀疑这两个库初始化端口的方式有所不同,但我没有串行编程的经验,可能是错误的。

有人知道可能导致此错误的原因吗?

最佳答案

事实证明,我错误地使用了 QextSerialPort::bytesAvailable() 而不是 QextSerialPort::atEnd()。我在另一个问题中看到了这一点,它帮助我摆脱了在等待超时时基本上阻止我的应用程序的错误消息,并且

Wes 的评论解决了我的另一个问题,即节点没有分配足够的内存来存储所有数据,从而导致数据丢失。

关于c++ - qextserialport 在 Windows 上丢失数据 — 我该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9713656/

相关文章:

c++ - OpenCV 使用步幅从数组生成 cv::Mat

c++ - 如何在编译时检测是否支持constexpr

c++ - 在 C++ 中重载复制构造函数

python - 在 NLTK 解析器中使用整数/日期作为终端

python - github 上 Python 包的自述文件的格式是什么?

regex - float - 正则表达式

c++ - const&& 在 range-for 中的应用?

python - 如何将突出显示或代码块插入 Sphinx 样式的文档字符串中?

javascript - 我如何在 qml canvas 元素中创建弯曲文本?

c++ - 如何为控制台输入 (stdin) 获取类似 QIODevice 的信号?