我在C ++中有一些代码可以连接到与odroid UX4连接的外部设备。我创建了 termios 结构,在该结构中,我将连接配置为在0.2秒后超时,但设备未回答
memset (&tty, 0, sizeof tty);
/* Error Handling */
if ( tcgetattr (fd, &tty ) != 0 )
{
std::cout << "Error " << errno << " from tcgetattr: " << strerror(errno) << std::endl;
}
/* Save old tty parameters */
tty_old = tty;
/* Set Baud Rate */
cfsetospeed (&tty, (speed_t)B921600);
cfsetispeed (&tty, (speed_t)B921600);
/* Setting other Port Stuff */
tty.c_cflag &= ~PARENB; // Make 8n1
tty.c_cflag &= ~CSTOPB;
tty.c_cflag &= ~CSIZE;
tty.c_cflag |= CS8;
tty.c_iflag &= ~(BRKINT | ICRNL | IMAXBEL | IXON | IXOFF);
tty.c_oflag &= ~(OPOST | ONLCR);
tty.c_lflag &= ~(ISIG | ICANON | IEXTEN | ECHO | ECHOE | ECHOK | ECHOCTL | ECHOKE);
tty.c_cflag &= ~CRTSCTS; // no flow control
tty.c_cc[VMIN] = 0; // read doesn't block
tty.c_cc[VTIME] = 0.2; // 0.2 seconds read timeout
tty.c_cflag |= CREAD | CLOCAL;
/* Make raw */
cfmakeraw(&tty);
/* Flush Port, then applies attributes */
tcflush( fd, TCIFLUSH );
if ( tcsetattr ( fd, TCSANOW, &tty ) != 0)
{
cout << "Error " << errno << " from tcsetattr" << endl;
}
但是当我从设备读取数据时,超时不受尊重
n = read(fd, &buf, 1);
我的问题是:linux在usb驱动程序上是否有一些内部超时之类的东西(这样它可以覆盖我的),还是有人有类似的问题?