使用While 循環進行非阻塞序列埠讀取
在此程式中,目標是透過串列與感測器通訊同時避免使用time.Sleep連接埠來讀取資料。不幸的是,由於每次循環迭代都會覆蓋資料緩衝區,使用 while 循環的最初嘗試失敗了。
解決方案在於實作面向位元組的讀取方法,並以 bufio.Reader 的引入為先導。這種面向流的讀取器為串行通訊提供了更複雜和強大的機制。
<code class="go">package main import ( "bufio" "fmt" "github.com/tarm/goserial" ) func main() { c := &serial.Config{Name: "/dev/ttyUSB0", Baud: 9600} s, err := serial.OpenPort(c) if err != nil { fmt.Println(err) } _, err = s.Write([]byte("\x16\x02N0C0 G A\x03\x0d\x0a")) if err != nil { fmt.Println(err) } reader := bufio.NewReader(s) reply, err := reader.ReadBytes('\x0a') // Read until a newline character is encountered if err != nil { panic(err) } fmt.Println(reply) s.Close() }</code>
透過此修改,程式將連續讀取傳入數據,直到遇到指定的分隔符號(在本例中為 x0a)。這種方法可確保可靠的資料檢索,而不需要阻塞操作。
以上是如何在Go中非阻塞地從串口讀取資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!