gpt4 book ai didi

c++ - Boost ASIO 用于 OS X 上的高波特率串口

转载 作者:行者123 更新时间:2023-11-30 02:42:46 24 4
gpt4 key购买 nike

我正在使用 Boost 的 ASIO 类进行串行通信。我想在 OS X 系统上以 1M 的波特率运行它。每当我尝试将波特率设置为高于 115200 的标准值时,都会出现异常。

boost::asio::serial_port m_port;
baudrate = 1000000;
try {
m_port.open(serial_port_path);
} catch (boost::system::system_error::exception e) {
// ...
}

try {
m_port.set_option(boost::asio::serial_port_base::baud_rate(baudrate));
} catch (boost::system::system_error::exception e) {
// Tripped here on OS X
}

我正在运行 OS X (Yosemite) 并通过自制软件安装了 Boost。我在 Linux 虚拟机(在我的 OS X 系统上运行)上测试了我的代码,它运行良好。

有没有办法让 Boost 在 OS X 中支持更高的波特率?

最佳答案

您可以使用native_handle() 方法获取端口的文件描述符,然后使用tcsetattr() 函数设置任意速度。我怀疑 Linux 将 B1000000 定义为速度预处理器定义,而 OS X 没有。

更新:

如何执行此操作的快速示例(只是输入,未测试):

#include <termios.h>

void set_speed(boost::asio::serial_port& p, unsigned speed)
{
termios t;
int fd = p.native_handle();

if (tcgetattr(fd, &t) < 0) { /* handle error */ }
if (cfsetspeed(&t, speed) < 0) { /* handle error */ }
if (tcsetattr(fd, &t) < 0) { /* handle error */ }

// Speed changed
}

关于c++ - Boost ASIO 用于 OS X 上的高波特率串口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26793878/

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