0

我正在使用 ubuntu 和 TI(供应商)发布的最后一个内核在 am335x 系统上进行开发。我正在使用虚拟 tty 设备 (ttyUSB0) 与远程设备通信。经过大约一小时的连续通信(循环打开-发送-接收-关闭)后,我得到了一个奇怪的 read() 行为。如果 UART 在阻塞模式下打开,则读取将永远挂起(无论我在 VMIN&VTIME 上设置什么值)。如果我以非阻塞模式打开它,它会永远返回-1(1小时后)。现在我正在使用 select() 来检查是否有要读取的数据。如果我收到来自 select 的否定结果,我该如何处理该错误?什么是好的做法?我必须重新启动服务?

此代码是在启动时启动的服务的一部分(使用新贵)。当它挂起时,如果我重新启动它,它会再次工作。重新启动对我正在与之通信的设备没有任何影响。它工作正常。

这是一段代码,只是为了完整性:

        FD_ZERO(&set); /* clear the set */
        FD_SET(tty_fileDescriptor, &set); /* add our file descriptor to the set */
        timeout.tv_sec = 10;
        timeout.tv_usec = 0;
        rv = select(tty_fileDescriptor + 1, &set, NULL, NULL, &timeout);
        if(rv>0){
            letti=read(tty_fileDescriptor,payLoadTMP,300);
        }if(rv<0){
                  perror("select")
                   //what to do here to re-stablish communication?
        }

perror 的输出是:

select: Resource temporarily unavailable

这是 dmesg 上的 grep

usb 1-1: cp210x converter now attached to ttyUSB0

有任何想法吗?如何重新建立连接?

4

0 回答 0