c - 当串行设备的路径改变时,C 程序停止
问题描述
在 Linux 中,我在后台运行一个用 C 编写的程序,该程序定期与连接到其中一个 USB 端口的设备通信。尽管设备总是插入同一个端口,但随着时间的推移,它/dev/ttyACM0
会/dev/ttyACM1
来回切换,即使没有连接其他设备。因此,每次发生切换时,我都必须重新启动程序。
为了解决这个问题,我尝试为新的符号链接设置 UDEV 规则,并且无论连接设备路径的变化如何,符号链接都可以正常工作。但是,当切换发生时,程序仍然停顿,需要重新启动。
是否有我可以为设备实施的系统规则以始终保持相同的路径,还是有另一种更通用的方法?
解决方案
第一种方法(更简单):
如果您可以访问对方的设备代码,我会从中实现一个 ping 消息。
然后,我会在两个 tty 设备上侦听该 ping 消息,以查看在哪个端口上接收到它(/dev/ttyACM0或/dev/ttyACM1)。
第二种方法:
在单独的线程上实现UDEV监视器。
显示器会检查您的设备使用了哪个 TTY 端口。
在端口更改的情况下,只需重新初始化通信线程...有关 udev 监视器 USB 代码,请参见udev_monitor_usb.c。
推荐阅读
- deep-learning - 张量(1.0).item()与浮动(张量(1.0))
- html - 使用 foreach 创建的 HTML 选项卡
- c# - 将 2 个 foreach 语句中的 2 个字符串添加到列表中
- android - CompanionDeviceManager 'onDeviceFound' 回调函数未被调用
- powershell - Powershell GUI 脚本:从文本框中读取变量
- angular - “对象”类型上不存在属性“令牌” - Angular 8
- react-admin - 是否可以在 react-admin 中使用自定义通知库而不是内置通知?
- html - Django from 没有进入 html 模板
- node.js - 如何将图像上传到 aws s3 并使用 node express 将 url 存储在 mongoDB 中
- reactjs - 当本地useState发生变化时如何测试组件渲染子组件?