Maison  >  Article  >  développement back-end  >  Comment lire les données d'un port série de manière non bloquante en Go ?

Comment lire les données d'un port série de manière non bloquante en Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-02 18:38:30940parcourir

How to Read Data from a Serial Port Non-Blockingly in Go?

Lecture non bloquante du port série à l'aide d'une boucle While

Dans ce programme, le but est de communiquer avec un capteur via une boucle série Port tout en évitant l'utilisation du temps. Sommeil pour lire les données. Malheureusement, la tentative initiale utilisant une boucle while a échoué en raison de l'écrasement du tampon de données à chaque itération de la boucle.

La solution réside dans la mise en œuvre d'une approche de lecture orientée octet, menée par l'introduction de bufio.Reader. Ce lecteur orienté flux fournit un mécanisme plus sophistiqué et plus robuste pour la communication série.

<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>

Avec cette modification, le programme lira en continu les données entrantes jusqu'à ce que le délimiteur spécifié (dans ce cas, x0a) soit rencontré. Cette approche garantit une récupération de données fiable sans avoir besoin d'opérations de blocage.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn