当串行设备的路径改变时,C 程序停止

标签 c serial-port uart

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

为了解决这个问题,我尝试过setting up a UDEV rule for a new symlink无论所连接设备的路径如何变化,符号链接(symbolic link)都会起作用。然而,当发生切换时,程序仍然停顿,需要重新启动。

是否有一个系统规则可以让设备始终保持相同的路径,或者是否有另一种更通用的方法?

最佳答案

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

第二种方法:
在单独的线程上实现 UDEV 监视器。
监视器检查您的设备使用哪个 TTY 端口。
如果端口发生变化,只需重新初始化通信线程... 请参阅udev_monitor_usb.c用于 udev 监视器 USB 代码。

关于当串行设备的路径改变时,C 程序停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59600960/

相关文章:

java - 跨平台 unicode 支持

c - C 迷宫的数据结构

c - linux下使用C语言读取串口

c++ - Qt编程: serial port communication module/plugin

linux - ttyusb udev 按硬件端口命名

uart - 使用 MicroPython 通过 USB 连接将数据写入 ESP32

c - 将文件的全部内容读入 c char *,包括新行

用于在没有/bin 目录的目标上执行 'echo' 的 C 程序

c - 循环缓冲区突发丢失最后一个字节

c - 多任务下与UART FIFO相关的Bug