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

Ada*_*son 5 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));
Run Code Online (Sandbox Code Playgroud)

有了这条线,程序将无法运行.它说:

libc++abi.dylib: terminate called throwing an exception
Abort trap: 6
Run Code Online (Sandbox Code Playgroud)

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

Bri*_*oyd 0

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

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

不管你信不信,你需要先打开端口,然后设置流量控制。上面的行并没有给出有关何时相对于其他行调用这些行的完整信息。当端口打开时将 setoption 置于 after ,它应该可以工作。

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

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