串口读取问题

  • 您好,很抱歉时间过得有点久了,我这边测select串口有数据才处理是没有问题的,这是相关测试代码,可以进行参考
    串口设置

    Code: Select all

        struct termios options;
        tcgetattr(serial_fd, &options);
        cfsetispeed(&options, B115200);
        cfsetospeed(&options, B115200);
        options.c_cflag |= (CLOCAL | CREAD);
        options.c_cflag &= ~CSIZE;
        options.c_cflag |= CS8;
        options.c_cflag &= ~PARENB;
        options.c_cflag &= ~CSTOPB;
        options.c_cflag &= ~CRTSCTS;
        tcsetattr(serial_fd, TCSANOW, &options);
    
    select 处理

    Code: Select all

           ret = select( m_serial_fd+1,&fdRead,NULL,NULL,&aTime );
    
            if (ret == -1) {
                perror("select 失败");
                close(m_serial_fd);
                return 1;
            } else if (ret) {
                if (FD_ISSET(m_serial_fd, &fdRead)) {
                    char buf[256];
                    int bytes_read = read(m_serial_fd, buf, sizeof(buf) - 1);
                    if (bytes_read > 0) {
                        buf[bytes_read] = '\0';
                        printf("get Data: %s\n", buf);
                    }
                }
            }