我在使用串口的Ubuntu下编写控制台应用程序。它需要以60 Hz的频率读取和写入串行端口。POSIX串行端口上的read()可能会很慢的原因是什么?
我发现read()的调用通常很慢,但并不总是很慢。我已经设置了O_NDELAY,所以经常返回(很好)。有时需要花费50毫秒才能完成,而且对于我的应用程序来说太慢了。在调用read()之前,我检查可用的字符数,所以它不应该等待数据。
什么是read()这样做需要这么长时间?我如何加快速度?在端口上
选项包括:
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
options.c_iflag &= ~IXON;
options.c_oflag = 0;
编辑:我一直在使用select()前面,但它竟然是正交的问题。用我的最新信息更新。
什么是串口的波特率?也许内核需要读取至少一个完整的字节...... – 2012-01-27 18:29:44
它可能只是您的特定硬件要求(例如,硬件规格这样说)或在OS上施加(例如,不良USB设备)以获得其状态。 – 2012-01-27 18:38:22
@Basile:115200 – amo 2012-01-27 18:42:26