Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Usb 通过C+连接到tty端口+;除非您';我先通过屏幕连接_Usb_Uart_Tty_Usbserial - Fatal编程技术网

Usb 通过C+连接到tty端口+;除非您';我先通过屏幕连接

Usb 通过C+连接到tty端口+;除非您';我先通过屏幕连接,usb,uart,tty,usbserial,Usb,Uart,Tty,Usbserial,我拿起了一个AUPS-A10-R11 DC UPS,正在使用他们的API为我的xen主机构建一些监控软件。他们的API通过设备上的USB连接运行,在主机上显示为/dev/ttyUSB# 除了一件让我困惑的事之外,我的一切都很顺利。当我第一次打开或重新启动它所连接的主机时,我无法与设备通信。但是,如果我打开与它的屏幕连接: screen /dev/ttyUSB0 9600 然后关闭它(ctrl+a,k),那么它将工作得非常好,直到下次重新启动主机 有人知道为什么我必须先通过屏幕连接到设备吗?我已

我拿起了一个AUPS-A10-R11 DC UPS,正在使用他们的API为我的xen主机构建一些监控软件。他们的API通过设备上的USB连接运行,在主机上显示为/dev/ttyUSB#

除了一件让我困惑的事之外,我的一切都很顺利。当我第一次打开或重新启动它所连接的主机时,我无法与设备通信。但是,如果我打开与它的屏幕连接:

screen /dev/ttyUSB0 9600
然后关闭它(ctrl+a,k),那么它将工作得非常好,直到下次重新启动主机

有人知道为什么我必须先通过屏幕连接到设备吗?我已将代码粘贴到此处:。在重新启动时进行连接时,它会在if…else子句的“readnothing”部分停止。通过屏幕连接到设备后,工作正常

有什么想法吗

有人知道为什么我必须先通过屏幕连接到设备吗

这种行为几乎总是与程序未完成termios初始化有关

理想的程序将为其目的配置串行终端,并在退出时将termios配置恢复到原来的状态。
但大多数程序,包括minicom和screen等终端仿真程序,只是简单地保留其termios配置,而不是恢复它。
幸运的是,这个遗留的termios配置填补了缺失的部分,使您的程序能够按预期访问串行终端

对“您的”代码的审查表明,它是从的公认答案复制而来的。根据得票数,这个代码显然适用于很多人。然而,作者承认它是在POSIX标准之前编写的,因此代码不应该被认为是可移植的。换句话说,您的里程数可能会有所不同

显然,您忽略了与POSIX兼容的。该程序中有用于阻止非规范模式的测试termios配置。

如果您喜欢使用cfmakeraw()宏来简化,那么这里有另一个。

听起来像是termios初始化不完整。您选择复制非POSIX代码,因为输入有行终止,所以使用阻塞规范模式会更简单。看到真棒,谢谢你的帮助!锯末,如果你想在那里做你的第一个答案,那就做了!