私は現在、Ubuntuでのシリアルポート通信にlibserialを使用するプロジェクトに取り組んでいます。MARK/SPACEパリティを許可するようにlibserialソースコードを変更しました。しかし、データ受信テストを行うとき、時々(約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;