0

我正在研究一个智能卡读卡器项目,我将不得不从智能卡读卡器读取/写入数据。此外,我将不得不从 PC 应用程序读取/写入数据。

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

智能卡读卡器 <-----> 微控制器 <-----> PC

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

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

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

//约翰

4

2 回答 2

1

是的,linux tty 上有相当多的缓冲。

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

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

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

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

于 2013-03-12T16:51:14.613 回答
0

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

于 2013-03-08T18:02:58.753 回答