2011-03-27 74 views
1

我想使用的代碼從一個Arduino溝通,Posix的串行連接與回調

http://todbot.com/blog/2006/12/06/arduino-serial-c-code-to-talk-to-arduino/

它使用termios的開放和交談的一個Arduino在非阻塞的方式,工作正常。我想知道的是什麼時候在Java上使用rxtx我可以註冊一個回調函數,當線上有數據時被調用,這樣我就不必手動檢查了。我GOOGLE了,但找不到任何有關如何註冊回調函數的信息?

我在Linux/OS X上,我試圖避免啓動一個新線程來監視/讀取線上的數據。

回答

1

Posix本身沒有定義一個方法來分配一個回調函數,當串行數據到達時被調用。如果您不想使用單獨的線程,則執行此類處理的標準方法是使用庫函數select。這允許程序定義你的程序感興趣的一組文件描述符,然後進入睡眠狀態。如果您感興趣的某個文件描述符發生了某些有趣的事情(例如新數據可供讀取),Select將自動喚醒您的進程。這避免了必須忙於等待並輪詢多個活動描述符。

另一種選擇是使用像libevent這樣的庫,它位於Posix圖層之上並提供回調基礎結構。 http://monkey.org/~provos/libevent/

1

Boost.Asio可以在使用串口時提供回調功能。它運行在Linux和Mac OS X上。