【问题标题】:Posix Serial Connection with Callbacks带有回调的 Posix 串行连接
【发布时间】:2011-03-27 21:04:32
【问题描述】:

我正在尝试使用来自的代码与 arduino 通信,

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

它使用 termios 以非阻塞方式打开并与 arduino 对话,效果很好。我想知道的是,当在 Java 上使用 rxtx 时,我可以注册一个回调函数,当在线上有数据时调用该函数,这样我就不必手动检查了。我用谷歌搜索但找不到任何关于如何注册回调函数的信息?

我在 Linux/OS X 上,我试图避免启动一个新线程只是为了观察/读取在线数据。

【问题讨论】:

    标签: linux macos serial-port posix


    【解决方案1】:

    Posix 本身并没有定义一种方法来分配要在串行数据到达时调用的回调函数。如果您不想使用单独的线程,则执行此类处理的标准方法是使用 select 库函数。这允许您的程序定义一组您的程序感兴趣的文件描述符,然后进入睡眠状态。如果您声明感兴趣的文件描述符之一发生有趣的事情(例如新数据可供读取),Select 将自动唤醒您的进程。这避免了为活动忙等待和轮询多个描述符。

    另一种选择是使用 libevent 之类的库,它位于 Posix 层之上并提供回调基础结构。 http://monkey.org/~provos/libevent/

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2012-08-20
        • 2017-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-12
        • 1970-01-01
        • 1970-01-01
        • 2016-01-31
        相关资源
        最近更新 更多