反対票が投じられたので、質問をするのは少し恥ずかしがり屋ですが、これは私を夢中にさせています。シリアル ポート イベント ハンドラーに関するすべての質問から、これが人気のあるテーマであることがわかります。多くの努力の後、次のコードが機能するようになりました。
public void serialEvent(SerialPortEvent evt) {
if (evt.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
rdata = (byte) comIn.read();
line_buffer[line_ptr++] = rdata;
data_available = true;
// System.out.print((byte)rdata);
if( rdata == '\n') {
line_available = true;
}
}
catch (Exception e) {
System.out.print("Failed to read data. (" + e.toString() );
}
}
}
印刷のコメントを外すと、期待しているデータが表示されるため、機能していると言えます。また、data_available および line available フラグを設定する行にブレークポイントを設定し、それらが発生します。
私はこのコードと次のように通信しようとしています:
// Code that requests data to be send back
// Code that inserts a delay for data to be received
while( comm.line_avaiable() == false ) { }
for(int j=0;j< comm.line_ptr; j++) {
System.out.print( (char)comm.line_buffer[j] );
}
このコードは、data_available を待ってから、受信したデータ行を出力します。示されているコードでは、while ループは data_available を取得しません。それだけでなく、イベント ハンドラーはイベントを取得しません。データはエコーされず (コメントは削除されます)、ブレークポイントにヒットすることもありません。
IF i は、data_available を待機する while ループをコメント アウトします (ハンドシェイクなしで実行しているため、データが受信されるまでの遅延を追加します。データは正常に受信されます。設定されている場合、イベント ハンドラーはブレーク ポイントにヒットし、データをエコーできます。 .
line_available フラグをポーリングすると、イベント ハンドラーがどのように壊れる可能性がありますか?