在Linux上读写串口

时间:2018-03-13 16:05:00

标签: go serial-port

我使用github.com/jacobsa/go-serial/serial包来处理Go程序中的串口。

简化示例:

options := serial.OpenOptions{
        PortName: "/dev/ttyUSB0",
        BaudRate: 115200,
        DataBits: 8,
        StopBits: 1,
        MinimumReadSize = 0,
        InterCharacterTimeout = 100,
    }       


    port, _ := serial.Open(options)
    defer port.Close()

    res := make([]byte, 1024)
    var err error
    var i int = 0

    for i == 0 {
        i, err = port.Read(res)
        if err != nil && err != io.EOF {
            log.Printf("port.Read: %v", err)
            err = errors.New("I/O error")
        }

}
log.Println("Read bytes: ", i)

// do something else

如果数据尚未准备就绪,则会出现io.EOF错误。但是,当连接丢失时,还有io.EOF错误!我如何区分等待新数据和断开连接?如果没有数据,FOR循环需要继续,直到达到超时,但如果连接丢失,我需要重新打开端口,因为它的描述符错误。处理这些案件的好习惯是什么?

0 个答案:

没有答案