gpt4 book ai didi

linux - POSIX 串行端口上的 read() 可能很慢的原因是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:09:10 24 4
gpt4 key购买 nike

我正在 Ubuntu 下编写一个使用串行端口的控制台应用程序。需要以60Hz的频率从串口读写。

我发现对 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() 但事实证明它与问题正交。更新了我的最新信息。

最佳答案

解决办法是在串口上设置low_latency标志。

参见 High delay in RS232 communication on a PXA270http://osdir.com/ml/serial/2003-11/msg00020.html

关于linux - POSIX 串行端口上的 read() 可能很慢的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9038109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com