2

背景

目前,我有用于收集传感器数据的TelosB 微尘,然后通过其 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)

问题

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

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

4

1 回答 1

2

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

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

于 2012-03-15T11:51:38.107 回答