2013-03-08 88 views
0

我正在研究智能卡读取器项目,我将不得不从智能卡读取器读取/写入数据。 此外,我将不得不从PC应用程序读取/写入数据。linux串行端口 - mulithread程序

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

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

我一直在使用/ ttyS0来& /就是ttyS1驱动程序对此将Linux移植&。

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

请指导我我是新的嵌入式Linux。

// John

回答

0

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

+0

在这里选择系统调用将是最佳选择: - http://www.faqs.org/docs/Linux-HOWTO/Serial-Programming-HOWTO.html – user1870619 2013-03-09 09:41:37

+0

open_input_source --->是一个用户定义的函数,使用terminos结构体 ????? – user1870619 2013-03-09 09:53:44

1

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

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

  • 你可以让他们无阻塞,并经常查询,看看是否可以读取这些数据(但是这可能会导致无谓纺CPU周期,减缓了其他任务)

  • 可以使用选择()得到的调度,直到你的设备之一有数据为你行事

  • 可以使用阻塞I/O,但是因为你有多个端口,也需要多线程