如何轮询串行输入?

如何轮询串行输入?

所以我有一个设备以设定的帧速率(10 fps 或其他)传输整数。它通过 USB 电缆连接到我的 Linux 机器 (ubuntu 20.04),在该机器上它被识别为 ttyACM0。我可以捕捉这个开发人员并查看收到的输入。

然而,我想做的是用 c 或 bash 编写一个函数/脚本,它轮询设备。因此,理想情况下,99% 的情况下,如果收到任何新输入,它都会去读取。如果没有,则不返回任何内容,但是如果您轮询并且已收到其中一个帧整数,则返回该值。

解决这个问题的最佳方法是什么?事件驱动的方法是否会更好/更准确,因此每当收到帧或其他内容时都会触发回调?

答案1

你从字面上描述了poll系统调用/libc 包装函数。您可以直接从 C/C++ 使用它,或者通过select模块在Python中。使用poll超时为 0。

Bash 没有pollselect功能。你正在做的事情并不真正符合 shell 脚本的思想。 (这就是我上面提到 Python 的原因——对于许多用例而言,几乎与 shell 脚本一样简单,使得此类数据处理变得更加容易,而无需诉诸 C++ 或 C(如果您所做的一切,我鼓励您避免使用 C++ 或 C)正在处理数据——正是正确的自动生命周期、类型安全、实际容器类型和更好的 C++ 流程控制使您的生活不仅更轻松,而且更安全))。

相关内容