Linux マシンで C 言語でプログラムを作成し、シリアル ポートの読み取りと書き込みを行いました。私のプログラムデータを送信しているエミュレータを実行しているWindows XPマシンに接続されています。
私のプログラムには 2 つのスレッドがあり、1 つはシリアル ポートからの入力を読み取って処理するためのものです。そのためのスレッドはサーバーソケットに接続し、処理されてからシリアルポートに書き戻されるデータをリッスンします。これらのスレッドは両方とも、実行中に継続的にループしています。
私が抱えている問題は、書き込みコマンドにあります。
void writeToPort(unsigned char* buf, int length)
{
int w = 0;
if(fd > 0)
w = write(fd, buf, length);
printf("wrote %d bytes\n", w);
}
そして、私はこのようにポートを開きます
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);
最初の数秒間は正常に機能しています。Windows のハイパーターミナルで、予期したバイトが適切に送信されていることを確認しました。ただし、ある時点で write() 呼び出しがハングします。もう一方の入力読み取りスレッドは続行され、シリアル ポートからの読み取りは正常に機能します。
なぜこれが起こっているのか誰にも分かりますか?fd で読み取りまたは書き込みが行われるたびにミューテックスを使用しようとしましたが、違いはないようです。他のスレッドがポートから実行中/読み取り中かどうかも問題ではないようです。アドバイスや提案は大歓迎です、ありがとう