Go 中使用 While-Loop 读取串口
在 Go 中,从串口读取需要了解 Read() 的操作方式。虽然原始程序使用 time.Sleep 在读取之前暂停,但 while 循环方法通常更适合连续数据采集。然而,由于 Read() 的行为,它提出了一个挑战。
在 while 循环实现中,Read() 将在可用时返回数据,可能会在每次循环迭代时覆盖缓冲区。要解决这个问题,我们需要等到所有传入数据都已接收后再读取。
一种解决方案是使用 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中文网其他相关文章!