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

时间:2012-12-18 04:46:15

标签: 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。谢谢!

1 个答案:

答案 0 :(得分:0)

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

这条线本身不是问题。由于在错误的时间调用函数,问题可能是抛出的异常。

信不信由你,您需要先打开端口,然后设置流量控制。上面的行不能全面了解何时相对于其他行调用行。将设置选项放在端口打开后,它应该可以工作。

还有一个set_option版本,它将boost :: system_error作为参数。如果由于某种原因它不起作用,该版本将返回错误。如果你不使用带有system_error参数的版本,那么你应该包装一个能够并且会在try / catch块中抛出异常的函数。

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

相关问题