首页 > 解决方案 > 当串行设备的路径改变时,C 程序停止

问题描述

在 Linux 中,我在后台运行一个用 C 编写的程序,该程序定期与连接到其中一个 USB 端口的设备通信。尽管设备总是插入同一个端口,但随着时间的推移,它/dev/ttyACM0/dev/ttyACM1来回切换,即使没有连接其他设备。因此,每次发生切换时,我都必须重新启动程序。

为了解决这个问题,我尝试为新的符号链接设置 UDEV 规则,并且无论连接设备路径的变化如何,符号链接都可以正常工作。但是,当切换发生时,程序仍然停顿,需要重新启动。

是否有我可以为设备实施的系统规则以始终保持相同的路径,还是有另一种更通用的方法?

标签: cserial-portuart

解决方案


第一种方法(更简单):
如果您可以访问对方的设备代码,我会从中实现一个 ping 消息。
然后,我会在两个 tty 设备上侦听该 ping 消息,以查看在哪个端口上接收到它(/dev/ttyACM0/dev/ttyACM1)。

第二种方法:
在单独的线程上实现UDEV监视器。
显示器会检查您的设备使用了哪个 TTY 端口。
在端口更改的情况下,只需重新初始化通信线程...有关 udev 监视器 USB 代码,请参见udev_monitor_usb.c


推荐阅读