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

How do I use boost::asio::serial_port support for hardware flow control?

本文关键字:支持 port 硬件 流控制 serial 何使用 boost asio      更新时间:2023-10-16

我正在使用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。谢谢

这是一个旧链接,但考虑到它是谷歌上两个不同序列数据搜索的首选项,我觉得它需要一个答案。

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

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

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

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