如果直接read,有没有数据都会返回。
如果用select异步,
ret = select( m_serial_fd+1,&fdRead,NULL,NULL,&aTime );
没有新的数据也会返回
而用其它的串口工具直接连设备读取就没这个问题
有没有好的方法只有串口有数据到才处理
串口读取问题
您好,很抱歉时间过得有点久了,我这边测select串口有数据才处理是没有问题的,这是相关测试代码,可以进行参考
串口设置
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);
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);
}
}
}