0

ここでスマートカードリーダープロジェクトに取り組んでいます。スマートカードリーダーからデータを読み書きする必要があります。また、PC アプリケーションからデータを読み書きする必要があります。

マイクロコントローラーには 2 つのシリアル ポートがあり、1 つはスマートカード リーダーに接続され、もう 1 つは PC に接続されています。

スマートカードリーダー <------> マイクロコントローラー <-----> PC

これには /ttys0 および /ttys1 ドライバーを使用して Linux を移植しました。

1>私の質問は、ポートから読み取れるデータがあることをアプリケーションが検出する必要がある場合、 read() システムコールで常にチェックする必要があるかどうかです。
2> ttys0 ドライバーには、受信したデータを保存するための内部バッファーがありますか? または、アプリケーションがすぐにデータを読み取らないとデータが失われますか?
3> ここでは、各ポートから rx/tx に別々のスレッドを使用していますが、これは正しいアプローチですか?

組み込み Linux を初めて使用する私を案内してください。

//ジョン

4

2 に答える 2

1

はい、Linux tty にはかなりの量のバッファリングがあります。

それらと対話する方法には、いくつかの選択肢があります。

  • それらをノンブロッキングにし、頻繁にポーリングして、それらからデータを読み取れるかどうかを確認できます(ただし、これにより、CPUサイクルが無駄に回転し、他のタスクが遅くなる可能性があります)

  • select() を使用して、デバイスの 1 つに操作するデータがあるまでスケジューラーに譲ることができます。

  • ただし、複数のポートが複数のスレッドを必要とする可能性があるため、ブロッキング I/O を使用できます。

于 2013-03-12T16:51:14.613 に答える
0

TTY プログラミングは、Linux のソケット プログラミングに似ています。したがって、基本的にソケットを非同期に設定し、データが利用可能になると信号を受信できます。バッファリングに関しては、はい、2 つのフリッピング バッファを使用してバッファリングされます。カーネルでの TTY の実装については、Linux device drivers 3rd edition の第 18 章を確認できます。

于 2013-03-08T18:02:58.753 に答える