Heim  >  Artikel  >  Backend-Entwicklung  >  Wie lese ich alle Daten von einem seriellen Port in Go mit einer While-Schleife korrekt aus?

Wie lese ich alle Daten von einem seriellen Port in Go mit einer While-Schleife korrekt aus?

Susan Sarandon
Susan SarandonOriginal
2024-10-26 21:29:29822Durchsuche

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

Lesen von der seriellen Schnittstelle mithilfe einer While-Schleife

Diese Frage betrifft ein in Go geschriebenes Programm zur Kommunikation mit einem Sensor über eine serielle Schnittstelle . Das Programm enthält eine While-Schleife zum Lesen eingehender Daten, funktioniert jedoch nicht ordnungsgemäß.

Originalcode:

<code class="go">buf := make([]byte, 40)
n := 0

for {
    n, _ = s.Read(buf)

    if n > 0 {
        break
    }
}

fmt.Println(string(buf[:n]))</code>

Problemerklärung:

Das Problem bei diesem Code besteht darin, dass Read() zu jedem Zeitpunkt mit jeder verfügbaren Datenmenge zurückkehren kann. Dies bedeutet, dass, wenn eine kleine Datenmenge empfangen wird, diese in der nächsten Schleifeniteration überschrieben wird.

Lösung:

Um alle eingehenden Daten korrekt zu lesen, haben wir kann einen bufio.Reader verwenden, um Daten zu lesen, bis ein bestimmtes Trennzeichen angetroffen wird. In diesem Fall wird angenommen, dass das Trennzeichen „x0a“ ist.

Geänderter Code:

<code class="go">reader := bufio.NewReader(s)
reply, err := reader.ReadBytes('\x0a')
if err != nil {
    panic(err)
}
fmt.Println(reply)</code>

Dieser Code liest weiterhin Daten von der seriellen Schnittstelle, bis der Das Trennzeichen „x0a“ wurde gefunden. Das Ergebnis wird dann in der Antwortvariablen gespeichert und gedruckt.

Das obige ist der detaillierte Inhalt vonWie lese ich alle Daten von einem seriellen Port in Go mit einer While-Schleife korrekt aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn