Неправильная последовательность полученных данных libserial

Сейчас я работаю над проектом, который использует libserial для связи через последовательный порт под Ubuntu. мы изменили исходный код libserial для обеспечения четности MARK/SPACE. но при выполнении теста получения данных иногда (с вероятностью около 5%) последовательность входящих данных неверна. Первый байт может перейти в середину входящего буфера или даже в конец.

Проблема внутри оригинала SerialPort::SerialPortImpl::HandlePosixSignal( int singnalNumber) fПри возникновении ошибки он не может правильно прочитать некоторые байты, а описание ошибки: "Ресурс временно недоступен". Но так как уже num_of_bytes_available используя ioctl, как можно потерпеть неудачу?

во время теста я часто переключался между паритетом MARK/SPACE. это вызовет проблему?

модифицированная часть в SetParity функция

for **PARITY_SPACE**

port_settings.c_cflag |= CMSPAR | PARENB;

port_settings.c_cflag &= ~PARODD;

port_settings.c_iflag = 0;

for **PARITY_MARK**

port_settings.c_cflag |= CMSPAR | PARENB;

port_settings.c_iflag = 0;

1 ответ

Хорошо, я наконец понял, что является причиной проблемы. libserialSerialPort класс не является потокобезопасным. Сигнал POSIX, вероятно, конфликтовал с потоком повышения. Я смог решить проблему, переключившись на SerialStream учебный класс.

Другие вопросы по тегам