gpt4 book ai didi

linux - 如何在 Linux 上设置自定义波特率?

转载 作者:IT老高 更新时间:2023-10-28 12:39:50 29 4
gpt4 key购买 nike

我想通过我在 Linux 上的串行端口与具有 termios.h 中未定义的非标准波特率的设备通信。

我尝试了 this post 中的“波特率混叠”方法,但是当我执行我的 C 程序(我将其命名为“testprogram”)时,Linux 说 “testprogram 在 ttyS0 上设置自定义速度。不推荐使用。”

我在 Google 上进行了一些搜索,似乎还有另一种(更新的?)方法可以将波特率更改为非标准值:在 http://sourceware.org/ml/libc-help/2009-06/msg00016.html 上作者说 struct termiosc_flag 必须与 BOTHER (=CBAUDEX | B0) 进行或运算。

使用这种方法,波特率直接在 struct termiosc_ispeedc_ospeed 成员中设置。但是,我不知道如何在我的 C 程序中使用这种方法。正如作者所说,当我包含 termios.h 时,没有定义/可用的 BOTHER,那么应该如何设置波特率呢?

如何在不更改内核的情况下将波特率设置为非标准值?

最佳答案

我注意到关于 BOTHER 未定义的同样情况。正如 Jamey Sharp 所说,您可以在 <asm/termios.h> 中找到它。 .只是一个警告,我想我遇到了包括它和常规 <termios.h> 在内的问题文件。

除此之外,我发现我拥有的 glibc 仍然无法正常工作,因为 glibc 的 tcsetattr 正在为不注意速度设置的旧式 struct termios 版本执行 ioctl。我可以通过使用新样式的 termios2 结构手动执行 ioctl 来设置自定义速度,它也应该可以通过包含 <asm/termios.h> 来使用。 :

struct termios2 tio;

ioctl(fd, TCGETS2, &tio);
tio.c_cflag &= ~CBAUD;
tio.c_cflag |= BOTHER;
tio.c_ispeed = 12345;
tio.c_ospeed = 12345;
ioctl(fd, TCSETS2, &tio);

关于linux - 如何在 Linux 上设置自定义波特率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12646324/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com