Cで2つのシリアルポートを接続/ブリッジしたいです。 2つのスレッドがポートを読み取り、もう一方のポートに書き込みます。Cで2つのシリアルポートを接続
void *rfid_to_uart_thread(void *) {
char rfid_read_buffer[100];
int writeCounter;
do {
writeCounter = read(rfidCom, rfid_read_buffer, sizeof(rfid_read_buffer)-1);
if (writeCounter > 0) {
write(uartCom, rfid_read_buffer, writeCounter);
} else
usleep(25);
} while (!bKillBridgeThreads);
return NULL;}
問題があり、書き込みが遅すぎるようだ: は、ここでは一例です。私はしばしば反対側のStringの半分しか受け取らない。書き込みが非同期的で、バッファが次のループで再び上書きされ、最後の '書き込み'が上書きされるため、データが無効になるようです。 そうですか?
ポートがNON_BLOCKINGを開かれ、RW、ボーレートがあるとmanを見ると9600
、あなたは2つのスレッド、スレッドの1つのポートと2つのCOMポートを持っています。スレッドはCOMポートまたは共通のポートに書き込みますか? – Raskayu
指定したコードは、あるポート(rfidcom)から読み込み、他のポート(uartCom)に書き込もうとしているシングルスレッドです。だからスレッド内でコードは連続している。したがって、書き込みは非同期ではありません。 readは、rfidデバイスから読み込みが完了すると(100バイト以下)実行されます。バッファサイズが読み込みに与える影響は小さいのでしょうか? –
申し訳ありませんが、質問が誤解を招く可能性があります。読んで受け取ったものだけを書くために「書く」のはいいです。 UART側では、すなわち、RFIDモジュールの出力を監視しているTeraTermを有しており、それはUARTに送信されなければならない。時々私はUART "2FEF0000"を介して受信し、次に "2FEF00001000 \ r"を取得します。だから、おそらく問題は書き込みがバッファリングされているすべてのことを書いていないようなものですか?バッファにすべての文字を強制的に書き込む方法はありますか? – Tobi