我正在从事智能卡读卡器项目,我将不得不从智能卡读卡器读取/写入数据。 此外,我将不得不从PC应用程序读取/写入数据。
我的微控制器上有两个串口连接到PC以外的智能卡读卡器。
智能卡读卡器< ------>微控制器< -----> PC
我移植了linux&使用/ ttys0& / ttys1驱动程序。
1>我的问题是,应用程序是否必须找到一些数据可以从端口读取,而不是总是用read()系统调用来检查它?
2 - ; ttys0驱动程序是否有内部缓冲区来存储接收的数据?如果应用程序不立即读取数据,数据会丢失吗?
3 GT;这里使用来自每个端口的rx / tx的seprate线程,这是正确的方法吗?
请指导我,我是Embedded linux的新手。
//约翰
答案 0 :(得分:1)
是的,linux tty上有相当多的缓冲。
您可以选择如何与他们互动。
你可以让它们无阻塞,并经常轮询以查看你是否可以从中读取数据(但这可能导致无用的旋转CPU周期,减慢其他任务)
您可以使用select()来提供给调度程序,直到您的某个设备有数据供您执行
您可以使用阻止I / O,但是因为您有多个端口可能还需要多个线程
答案 1 :(得分:0)
TTY编程类似于Linux中的套接字编程。所以基本上你可以将套接字设置为异步,并在数据可用后接收信号。关于缓冲,是的,它使用两个翻转缓冲区进行缓冲。您可以查看Linux设备驱动程序第3版中有关内核中TTY实现的第18章。