ホームページ  >  記事  >  バックエンド開発  >  Go の While ループを使用してシリアル ポートからデータを連続的に読み取る方法は?

Go の While ループを使用してシリアル ポートからデータを連続的に読み取る方法は?

DDD
DDDオリジナル
2024-10-27 04:47:30872ブラウズ

How to Read Data from a Serial Port Continuously with a While-Loop in Go?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。