linux串口 - 多线程程序

时间:2013-03-08 14:47:20

标签: serial-port embedded-linux tty

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

我的微控制器上有两个串口连接到PC以外的智能卡读卡器。

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

我移植了linux&使用/ ttys0& / ttys1驱动程序。

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

请指导我,我是Embedded linux的新手。

//约翰

2 个答案:

答案 0 :(得分:1)

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

您可以选择如何与他们互动。

  • 你可以让它们无阻塞,并经常轮询以查看你是否可以从中读取数据(但这可能导致无用的旋转CPU周期,减慢其他任务)

  • 您可以使用select()来提供给调度程序,直到您的某个设备有数据供您执行

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

答案 1 :(得分:0)

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