2012-12-18 81 views
4

我正在使用Boost的asio :: serial_port庫與虛擬串行端口(FTDI芯片)通信。我想使用硬件流控制(即RTS/CTS),但似乎無法找到有關如何將其與Boost結合使用的文檔。我得到的代碼是:如何使用boost :: asio :: serial_port支持硬件流控制?

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。謝謝!

回答

0

這是一箇舊的鏈接,但考慮到它是谷歌的兩個不同的搜索串行數據的頂部搜索項目,我覺得它需要一個答案。

該行本身不是問題。由於在錯誤的時間調用函數,這個問題可能是拋出的異常。

不管你信不信,你需要先打開端口,然後設置流量控制。上面的線條並沒有給出關於其他線條被調用的時間的全貌。當端口打開時,將setoption放置在後面,它應該起作用。

還有一個版本的set_option將boost :: system_error作爲參數。如果該版本因任何原因不起作用,該版本將返回錯誤。如果你不使用帶有system_error參數的版本,那麼你應該包裝一個可以並且會在try/catch塊中拋出異常的函數。

此外,終止是由於未處理的異常(編碼問題),因此終止時的神祕異常。如果處理異常,異常本身將指向串行配置問題(運行時問題),可能缺乏設置它的權限或端口未打開,因此驗證RTS可用性失敗等。

相關問題