私は現在、Ubuntuのシリアルポート通信にlibserialを使用するプロジェクトに取り組んでいます。 MARK/SPACEパリティを許可するようにlibserialソースコードを変更しました。データ受信テストを行うときに、入力データシーケンスが間違っていることがあります(約5%の確率)。最初のバイトは、入ってくるバッファの中央にジャンプすることも、最後にジャンプすることもできます。libserial受信データのシーケンスが間違っています
問題は元のSerialPort::SerialPortImpl::HandlePosixSignal(int singnalNumber) f
の内部にあり、エラーが発生した場合、正しくバイトを読み取れず、エラーの説明が「リソースは一時的に利用できません」です。しかし、すでにioctlを使ってnum_of_bytes_available
を取得しているので、どのように失敗する可能性がありますか?
は私のテストの間に、私は頻繁にマーク/スペースパリティ切り替えます。それは問題を引き起こすでしょうか?
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;
テストの後、シリアルポートの読み取り/書き込み機能をブーストスレッドに入れたときにのみ問題が発生することがわかりました。また、メインスレッドの内部で読み取り/書き込みが行われるときは完璧に動作します。しかし、私はそれのためのスレッド、可能な解決策を使用する必要がありますか? – ruhoo