问题标签 [termios]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
2911 浏览

c++ - 在 Linux 上使用 SOCAT 与 USB 进行串行通信

我想澄清一下 socat 对串行通信的作用,因为由于某种原因,我只能在使用 socat 时让与我的 Arduino 的通信正常工作。

这是我用来设置 socat 的命令:

我在 C++ 中使用的代码是:

因此,当我通过 socat 运行此程序时,arduino 会做出应有的反应,但如果我将 open() 行从 /tmp/serial 更改为 /dev/ttyACM0,则 arduino 将不再执行。有人可以向我解释一下 socat 对数据做了什么以使事情正常进行,以及如何更改我的 C 代码来做同样的事情?我不能在我的最终实现中使用 socat,因为它会导致延迟,使我的机器人无法预测。

0 投票
1 回答
9490 浏览

mingw - 从哪里获取 termios.h

在我的特殊情况下,我正在使用MinGW/MSys. 它不包含termios.h. 原来它不是一个可以下载和安装的库(谷歌没有找到)。Termcap也不包括termios.h

从哪里可以得到这个文件?

0 投票
2 回答
1934 浏览

c - 串行编程:发送者和接收者

所以我在一个项目中使用两个 Xbee ZB (S2B) 将数据从一个传输到另一个。它是一个 8 个数据位、无奇偶校验、1 个停止位系统 (8N1)。

我有两个问题。

1. 由于我在笔记本电脑上与 USB 适配器的 RS232(DB9 连接器)接口连接,在 B230400 的波特率下,对fwrite/fread/fopen/fclose的系统调用会比write/read/open/close更好地使用? (我认为 fread() 将无法正常工作,因为据我所知它没有波特率配置。)

2.我有一台计算机运行一个程序(发射器程序)和另一个程序(接收器程序)。两个程序都需要能够读写,因为我希望能够从发送和接收端知道不同的信息集。

就像接收端(如果我看到字母 Q,停止并关闭端口)或发送端(等待读取端发送字母 G 开始写入并在完成写入后关闭)。

在非规范输入处理下使用( http://tldp.org/HOWTO/Serial-Programming-HOWTO/x115.html )中的一些代码,我尝试设置一个用于从 USB 端口写入和读取的基本模板任何一边。我的问题是:

*如果并且是否需要对发送和接收程序的 termios 结构 (newtio) 进行不同的配置设置(c_cflag、c_iflag、c_oflag、c_lflag)?*

我的代码:

如果可能的话,我正在寻找最佳的写入和读取速率,此时没有数据损坏处理。通过优化,我说的是 termios 结构的配置标志的最佳设置。

谢谢您的帮助。

0 投票
0 回答
521 浏览

linux - Linux,termios:如何处理 select() 的否定结果

我正在使用 ubuntu 和 TI(供应商)发布的最后一个内核在 am335x 系统上进行开发。我正在使用虚拟 tty 设备 (ttyUSB0) 与远程设备通信。经过大约一小时的连续通信(循环打开-发送-接收-关闭)后,我得到了一个奇怪的 read() 行为。如果 UART 在阻塞模式下打开,则读取将永远挂起(无论我在 VMIN&VTIME 上设置什么值)。如果我以非阻塞模式打开它,它会永远返回-1(1小时后)。现在我正在使用 select() 来检查是否有要读取的数据。如果我收到来自 select 的否定结果,我该如何处理该错误?什么是好的做法?我必须重新启动服务?

此代码是在启动时启动的服务的一部分(使用新贵)。当它挂起时,如果我重新启动它,它会再次工作。重新启动对我正在与之通信的设备没有任何影响。它工作正常。

这是一段代码,只是为了完整性:

perror 的输出是:

这是 dmesg 上的 grep

有任何想法吗?如何重新建立连接?

0 投票
0 回答
163 浏览

c - 光标移动不规律 (C)

我在做 Nim 游戏程序时遇到了一些麻烦。到目前为止,我有一个显示管道金字塔的程序。它看起来像这张图片上的“起始位置”金字塔。

http://www.mathsisfun.com/puzzles/images/b-nim.gif

无论如何,我在移动时遇到了麻烦,每当我尝试移动时,我的光标都会以完全不稳定的方式移动。这将使游戏完全无法玩。我不确定这是否是我的计数变量的问题,甚至是我完全丢失的一些较小的东西,无论如何这就是我所拥有的:

那么,我在这里缺少什么吗?其他一切都几乎完美无缺,我无法理解为什么这会带来麻烦。另外,还有其他方法可以做到这一点吗?我对任何替代方式持开放态度。

0 投票
0 回答
1009 浏览

c - 从串口读取时丢失位

我正在尝试使用串行端口从自定义硬件中读取数据。我相信配置是正确的。问题是,我看到一些字节丢失了。在数据中,指定了数据的长度,因此我知道是否缺少某些数据。

我的配置如下:

这就是我的阅读方式:

以下是数据示例:

对于配置,我需要的是:波特率:19200 数据位:8 个停止位:1 奇偶校验:无流量控制:无

仅供参考,我的硬件正在逐字节发送数据。所以上面代码中的n始终为 1(或 0)。

当我尝试使用腻子时,一切都很好。有什么我错过的吗?

谢谢

0 投票
1 回答
837 浏览

c - 使用 C 从路由器中转储闪存

我正在创建一个转储路由器闪存的应用程序(类似于 brn-tool)。路由器的闪存可以从它的引导加载程序中转储,我已经可以通过串行电缆访问它。

到目前为止,创建的应用程序可以抓取 10000 个字节(引导加载程序在一次扫描中返回的最大字节数)。

我无法获取其余的闪存字节。

如前所述,可以通过选择相应的选项并输入要读取的字节数从引导加载程序菜单中读取字节。代码如下。

运行一次时,该方法工作正常并正确输出 10000 个字节。

但是,为了创建完整的 Flash Dump,上述方法必须以不同的起始地址多次运行。多次运行该方法时,在提示符内不执行菜单等的序列,而是在设备返回内存数据时运行。

菜单如何工作的概述如下:

我试图找出天气有一种方法可以检查所有数据是否已从串行端口发送,以便重新运行该方法。

我正在使用 termios 库来连接串口。

谢谢你,安德鲁·博格

0 投票
1 回答
425 浏览

c - 如何使用 c 检查用户在 stty 中为擦除/退格设置的内容

在 Unix 中,某些键的默认设置因平台而异。例如,在 Ubuntu 中擦除可能是erase = ^?. 但是,对于 AIX,它可能与 example 完全不同erase = ^H。如何检查 C 中的 stty 设置?

这是我试图写的

使用 gcc 编译后。它说 ERASE 未声明。那么实际上我应该使用的正确选项或变量是什么?

0 投票
2 回答
2187 浏览

c++ - 非规范模式

在 linux 终端中以非规范模式使用退格的简单方法是什么?

这是代码的一部分,当我设置标志时:

当我按退格键时,我得到一个

^?

. 但我需要删除最后一个符号..

谢谢你。

0 投票
1 回答
922 浏览

c - termios.h 如何使用特殊字符

我有一个设置为 ~(ICANON) 模式的终端,我想知道如何将我获得的数据用于退格(这是 ^?)所以我可以发送一个 putchar('\b') 到控制台去退一格。

编辑:

谢谢