我使用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循环需要继续,直到达到超时,但如果连接丢失,我需要重新打开端口,因为它的描述符错误。处理这些案件的好习惯是什么?