【问题标题】:In linux asynchronous serial port programming how to distinguish read and write在linux异步串口编程中如何区分读写
【发布时间】:2015-02-06 05:12:13
【问题描述】:

我正在实现一个带有串行接口的 linux 应用程序。我正在使用信号机制使其异步。

saio.sa_handler = signal_handler_IO;

我正在读取信号处理程序本身及其工作中接收到的数据。由于我需要快速响应,因此我在信号处理程序中实现了更多逻辑。所以信号处理器不是很小。

问题是当我尝试写入串行端口时,信号处理程序再次被调用。我不想要这个。是否可以仅将信号处理程序用于接收到的数据。

或者是否可以在信号处理程序中区分接收和发送?

基兰

【问题讨论】:

  • 如何创建一个结构,如果您写入或读取数据,您将对其进行修改。这种方式在你的处理程序中你可以使用 if() 函数,你只会在你想要的条件下执行它。
  • 你为什么使用信号?使用select() 等的常用方法可以正常工作。

标签: c linux asynchronous serial-port


【解决方案1】:

是否可以仅将信号处理程序用于接收到的数据。

如果您坚持使用信号来完成任务,当然可以让生成信号的软件部分不为传输数据生成信号或生成其他信号。

【讨论】:

    【解决方案2】:

    在配置信号处理程序时,可以将以下标志添加到 saio sigaction 结构中的 sa_flags:

    saio.sa_flags |= SA_SIGINFO;
    

    当您配置此标志时,您的函数 signal_handler_IO 将需要 3 个参数:

    void signal_handler_IO (int signo, siginfo_t *info, void *context)
    

    然后结构 siginfo_t 将包含理解导致中断的信号所需的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多