Lesen von der seriellen Schnittstelle mit While-Schleife in Go
In Go erfordert das Lesen von einer seriellen Schnittstelle ein Verständnis der Funktionsweise von Read(). Während das ursprüngliche Programm time.Sleep zum Anhalten vor dem Lesen verwendete, wird für die kontinuierliche Datenerfassung oft ein While-Schleifen-Ansatz bevorzugt. Dies stellt jedoch aufgrund des Verhaltens von Read() eine Herausforderung dar.
In der While-Schleifen-Implementierung gibt Read() Daten zurück, wann immer sie verfügbar sind, und überschreibt möglicherweise den Puffer bei jeder Schleifeniteration. Um dieses Problem zu lösen, müssen wir mit dem Lesen warten, bis alle eingehenden Daten empfangen wurden.
Eine Lösung ist die Verwendung eines bufio.Reader, der eine gepufferte Schnittstelle zum Lesen aus einem Stream bereitstellt. Es ermöglicht uns, ein Trennzeichen wie „x0a“ (Zeilenumbruch) anzugeben und zu warten, bis dieses Trennzeichen gefunden wird, bevor wir die Daten zurückgeben.
Der überarbeitete Code unten zeigt, wie bufio.Reader zum Lesen von Daten verwendet wird von einem seriellen Port, bis das Trennzeichen „x0a“ empfangen wird:
<code class="go">reader := bufio.NewReader(s) reply, err := reader.ReadBytes('\x0a') if err != nil { panic(err) } fmt.Println(reply)</code>
Dieser Code wartet, bis das Trennzeichen „x0a“ empfangen wird, bevor er die Daten in der Variable „reply“ zurückgibt. Der von bufio.Reader verwendete Puffer stellt sicher, dass Daten bei mehreren Read()-Aufrufen nicht überschrieben werden.
Das obige ist der detaillierte Inhalt vonWie lese ich kontinuierlich Daten von einem seriellen Port mit einer While-Schleife in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!