Фон
На данный момент у меня есть частицы TelosB, которые используются для собирать данные датчиков, а затем передавать их через последовательный порт USB со скоростью 115200 бод.
В прошлом я использовал Python для разработки программы, которая будет взаимодействовать с мотом, но GIL Python имеет свою долю проблем с многопоточностью, которые можно решить, только не используя 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)
Вопрос
Поэтому я подозреваю, что две библиотеки инициализируют порт по-разному, но у меня нет опыта последовательного программирования, и я могу ошибаться.
Кто-нибудь знает, что может быть причиной этой ошибки?