【问题标题】:linux serial ports -- mulithread programlinux串口——多线程程序
【发布时间】:2013-03-08 14:47:20
【问题描述】:

我正在开发一个智能卡读卡器项目,我将不得不从智能卡读卡器读取/写入数据。 我还必须从 PC 应用程序读取/写入数据。

我的微控制器上有两个串行端口,一个连接到智能卡读卡器,另一个连接到 PC。

智能卡读卡器微控制器PC

我已经移植了 linux 并为此使用了 /ttys0 和 /ttys1 驱动程序。

1> 我的问题是,如果应用程序必须找到可以从端口读取的某些数据,而不是我必须始终使用 read() 系统调用检查它吗?
2> ttys0 驱动程序是否有内部缓冲区来存储接收到的数据?或者如果应用程序不立即读取数据会丢失数据?
3> 这里对每个端口的 rx/tx 使用单独的线程,是不是正确的做法?

请指导我,我是嵌入式 linux 的新手。

//约翰

【问题讨论】:

    标签: serial-port embedded-linux tty


    【解决方案1】:

    是的,在 linux tty 上有相当数量的缓冲。

    你有几个选择如何与他们互动。

    • 您可以将它们设为非阻塞,并经常轮询以查看是否可以从中读取数据(但这可能会导致 CPU 周期无用地旋转,从而减慢其他任务)

    • 您可以使用 select() 让给调度程序,直到您的一台设备有数据可供您操作

    • 您可以使用阻塞 I/O,但是由于您有多个端口,可能还需要多个线程

    【讨论】:

      【解决方案2】:

      TTY 编程类似于 Linux 中的套接字编程。所以基本上你可以将套接字设置为异步的,并在数据可用时接收信号。关于缓冲,是的,​​它使用两个翻转缓冲区进行缓冲。您可以查看 Linux 设备驱动程序第 3 版中的第 18 章,了解内核中的 TTY 实现。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多