c++ - 如何使用 boost::asio::serial_port 支持硬件流控制?

标签 c++ boost serial-port boost-asio flow-control

我正在使用 Boost 的 asio::serial_port 库与虚拟串行端口(FTDI 芯片)通信。我想使用硬件流控制(即 RTS/CTS),但我似乎找不到太多关于如何将它与 Boost 一起使用的文档。我得到的代码是:

serialPort.set_option(boost::asio::serial_port::
flow_control(boost::asio::serial_port::flow_control::hardware));

有了这一行,程序将不会运行。它说:

libc++abi.dylib: terminate called throwing an exception
Abort trap: 6

如果我将 ...flow_control::hardware 更改为 ...flow_control::software...flow_control::none,串行端口工作正常(但显然没有硬件流控制)。我花了很多时间寻找这方面的任何文档,但没有找到任何文档。有谁知道如何在 Boost 中使用流量控制,或者知道记录在哪里?我在 Mac OS 10.8.2 上使用 Fink 的 Boost。谢谢!

最佳答案

这是一个旧链接,但考虑到它是 google 上两次不同的串行数据搜索的热门搜索项,我觉得它需要一个答案。

线路本身不是问题。问题可能是由于在错误的时间调用函数而引发的异常。

信不信由你,你需要先打开端口,然后再设置流量控制。上面的行并没有给出这些行相对于其他行何时被调用的全貌。将 setoption 放在端口打开后,它应该可以工作。

还有一个版本的 set_option 将 boost::system_error 作为参数。如果该版本因任何原因不起作用,它将返回一个错误。如果您不使用带有 system_error 参数的版本,那么您应该包装一个可以并且将会在 try/catch block 中抛出异常的函数。

另外,终止是由于未处理的异常(编码问题),因此是终止处的神秘异常。如果您处理异常,异常本身将指向串行配置问题(运行时问题),这可能是缺乏设置它的权限或端口未打开导致 RTS 可用性验证失败等。

关于c++ - 如何使用 boost::asio::serial_port 支持硬件流控制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13926439/

相关文章:

visual-c++ - 使用自定义 ICU 构建和使用 Boost for Windows Visual Studio

c++ - boost::visit_each 有什么用?

objective-c - 读取串口iOS

c++ - RFB 协议(protocol)中的 PointerEvent 和 DesktopSize

c++ - 三次贝塞尔曲线是否完全包含在其控制点的边界框内?

c++ - 我可以实现对作为父类参数的虚函数的覆盖吗?

c++ - 如何使用 Boost 库实现 SortedVector API?

php - 与 Arduino、PHP 和 OpenWrt 的串行连接。漏洞?

c# - 将正确的 Gcode 字符串发送到串行端口?

c++ - 计算文本文件中的单个字母并打印结果 - 错误输出 c++