qextserialport在Windows上删除数据 - 我该怎么办呢?

时间:2012-03-15 03:39:45

标签: 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)

问题

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

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

1 个答案:

答案 0 :(得分:2)

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

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