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

Posted

技术标签:

【中文标题】如何使用 boost::asio::serial_port 支持硬件流控制?【英文标题】:How do I use boost::asio::serial_port support for hardware flow control? 【发布时间】:2012-12-05 06:34:07 【问题描述】:

我正在使用 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】:

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

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

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

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

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

【讨论】:

以上是关于如何使用 boost::asio::serial_port 支持硬件流控制?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 `__slots__` 初始化属性?

如何使用:从 __future__ 使用 django 导入部门

如何使用 CSS 使多个内联块元素居中?

如何在 django 中使用模型进行查询

如何使用 __subclasscheck__ 魔术方法?

python如何使用__new__()函数的参数列表中的属性创建类?