Go の While ループを使用したシリアル ポートからの読み取り
Go でシリアル ポートから読み取るには、Read() の動作方法を理解する必要があります。元のプログラムでは読み取り前に一時停止するために time.Sleep を使用していましたが、継続的なデータ取得には while ループ アプローチが好まれることがよくあります。ただし、Read() の動作により課題が生じます。
while ループの実装では、Read() は利用可能なデータがあるたびにデータを返し、ループ反復ごとにバッファーを上書きする可能性があります。この問題を解決するには、すべての受信データが受信されるまで待ってから読み取る必要があります。
解決策の 1 つは、ストリームから読み取るためのバッファーされたインターフェイスを提供する bufio.Reader を使用することです。これにより、'x0a' (改行) などの区切り文字を指定し、その区切り文字に達するまで待機してからデータを返すことができます。
以下の改訂されたコードは、bufio.Reader を使用してデータを読み取る方法を示しています。 「x0a」区切り文字が受信されるまでシリアル ポートから送信します:
<code class="go">reader := bufio.NewReader(s) reply, err := reader.ReadBytes('\x0a') if err != nil { panic(err) } fmt.Println(reply)</code>
このコードは、「x0a」区切り文字が受信されるまで待機してから、「reply」変数にデータを返します。 bufio.Reader によって使用されるバッファにより、複数の Read() 呼び出し中にデータが上書きされないことが保証されます。
以上がGo の While ループを使用してシリアル ポートからデータを連続的に読み取る方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。