【发布时间】:2016-04-14 15:16:42
【问题描述】:
我正在使用 ubuntu 通过串行端口与设备通信。所有消息都必须是十六进制值。我已经在 Windows 环境中使用白蚁测试了通信设置,并且得到了我期望的响应。但是在使用 Boost:asio 时我无法得到任何响应。
这是我设置串行端口的方式:
boost::asio::serial_port serialPort;
serialPort.open(portNumber);
serialPort.set_option(boost::asio::serial_port_base::baud_rate(baudRate));
serialPort.set_option(boost::asio::serial_port_base::character_size(8));
serialPort.set_option(boost::asio::serial_port_base::stop_bits(boost::asio::serial_port_base::stop_bits::one));
serialPort.set_option(boost::asio::serial_port_base::parity(boost::asio::serial_port_base::parity::none));
serialPort.set_option(boost::asio::serial_port_base::flow_control(boost::asio::serial_port_base::flow_control::none));
uint8_t hexValue = message.at(i) >= 'A' ? (message.at(i) - 'A' + 10) : message.at(i) - '0';
serialPort.write_some(boost::asio::buffer(&hexValue, sizeof(uint8_t)));
那么我需要在 ASIO 中进行设置以使其正确发送吗?
【问题讨论】:
-
“十六进制值”是什么意思?你确定
uint8_t hexValue = ...;这行是正确的吗? -
@MikeCAT 我希望将像 {0,1,...E,F} 这样的十六进制值作为二进制数据传递。所以是的,看起来我的转换不正确。但是,下面提供工作转换的人以及将其写入串行端口的方式。
-
一个字节(8 位)由两个十六进制数字组成,而不是一个。你确定吗?
标签: c++ boost serial-port boost-asio