使用设备和标准输入的挑战

使用设备和标准输入的挑战

我使用基于 ubuntu 的嵌入式处理器作为机器视觉系统。它通过 2 个串行端口与关联的飞行控制器进行通信。

我的问题是,支持视觉<->飞行控制器通信的正常 open()、close() 调用导致 stdin 调用(fgets()、scanf() 等)以特殊方式失败 - 调用认为有输入,但是没有,返回的缓冲区是垃圾。

我最初认为这是由于内核的默认文本控制台和我使用的串行设备之间的冲突造成的。经过迂回搜索后,我意识到这是不正确的 - 我发现了一个微妙的错误,导致设备文件描述符在某些情况下被设置为 0 - 与 stdin 相同。

我通过跟踪下面漫游者的线索发现了这个错误。我接受了他的答案,因为他让我找到了真正的问题。

下面的评论确实为其他关心设备、标准输入和默认文本控制台的人提供了一些有用的信息。

谢谢

答案1

如果您只想设置终端线特征并让它们粘住,请尝试此操作

# Serial line
tty=/dev/ttyS1

# Open the serial port and hold it open
sleep 300 <$tty &
slpid=$!

# Set the characteristics and run the serial port code
stty 19200... <$tty
/run/your/program

# Clean up
kill $slpid 2>/dev/null

相关内容