背景
目前,我有TelosB莫特,用来收集传感器数据,然后通过其115200波特的USB串口进行传输。
在过去,我使用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)问题
因此,我怀疑这两个库初始化端口的方式有所不同,但我没有串行编程的经验,可能是错误的。
有人知道是什么导致了这个错误吗?
发布于 2012-03-15 11:51:38
事实证明,我错误地使用了QextSerialPort::bytesAvailable()而不是QextSerialPort::atEnd()。我在另一个问题中看到了这一点,它帮助我消除了在等待超时时基本上阻止我的应用程序的错误消息,
韦斯的评论解决了我的另一个问题,那就是莫特没有足够的内存来存储所有的数据,导致数据丢失。
https://stackoverflow.com/questions/9713656
复制相似问题