2013-03-08 50 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,但是因爲你有多個端口,也需要多線程