0

私の質問のいくつかの用語が間違っているのではないかと心配しています。私に耐えて、私が間違っているところはどこでも私を訂正してください。

シリアルポートに接続されたカードリーダーを操作するための一連の機能を提供するライブラリ/プログラムを作成する必要があります。挿入されたカードを取り出すのと同じように、ユーザーは自分のコードを呼び出すだけです。たとえば、

cardEject(); // or
track2Data( response); // to read data of track 2 of magnetic stripe.

cardEject()その他の機能は、シリアルポートのオープン、データの書き込み、確認応答の確認、エラーコードの確認、障害が発生した場合のコマンドの再送信などを自動的に処理します。シリアルポート上のデバイスとの通信についてはかなり明確です。

私の質問は、これらすべての関数を記述してテストした後、どのようにユーザーに提供する必要があるかということです。
彼にヘッダーファイル(.h)とオブジェクトファイル(.o)を与える必要がありますか?実際のプログラムをコンパイルしながらオブジェクトにリンクできるようにします。
静的ライブラリ(.a)を提供する必要がありますか?

どちらが良いアイデアですか?

各機能がシリアルポートを開いてから閉じるのは良い考えですか?または、initCardReader()それを開き、そのプロパティを設定し、それcloseCardReader()を閉じる必要がありますか?initCardReader()他のすべての関数は、 ?の後にのみ呼び出すことができます。

今、ばかげているが本当の質問:-)そのようなプログラムに使用される用語は何ですか?それはドライバーまたはライブラリまたはデバイスインターフェイスですか?そのようなプロジェクトの正しいラベルは何ですか?

御時間ありがとうございます。

編集
私を導いてくれた皆さんに感謝します。本当に感謝。
このAPIは、より大きなプロジェクトの一部になる必要があります。実際、私もそのプロジェクトに取り組んでいます。しかし、このAPIは、私がいるかどうかに関係なく、他のプロジェクトで使用される可能性が高いです。他のプロジェクトでの使用の可能性を考えると、ライブラリの方が理にかなっていると思います。私が間違っている場合は、親切に訂正してください。

4

4 に答える 4

3

AndersKからの回答を紹介します。カードリーダー用のAPIを作成しています。

より一般的な質問についての私の2セント:

オープン/クローズ接続についてのあなたの質問は、あなたが心に留めておかなければならない2つの側面があります。接続を開いたり閉じたりするのはユーザーに任せる方法を進めると仮定しましょう。終了後に閉じるのを忘れた場合、複数のプロセスがカードリーダーにアクセスした場合はどうなりますか?これらのシナリオでは、書き込み/読み取りのたびに、ポートを他のプロセスに解放することができます。最終的には、実行する操作によって異なります。APIを使用するプロセスでは、通常、常にreadメソッドを複数回呼び出します。これを開いたままにするか、APIに複数のレコードの読み取りを再度実装して、次のような可能性を回避できます。接続は開いたままになります。

主に他のプロジェクトで使用する場合は、ライブラリを作成します。また、誰もが実装できるように、ライブラリを1か所で変更できるようになります。繰り返しますが、実装する場所に応じて、コードを追加する方が適切な場合は、さまざまなシナリオがあります。

于 2010-08-31T08:41:15.447 に答える
2

私はあなたがそれをできるだけ単純にすべきだと思います、静的ライブラリとヘッダーファイルは良いスタートであるべきです。

1つの方法は、カードリーダーをファイルなどの他のリソースと同じように扱うことです。つまり、カードリーダーを開いて初期化し、カードリーダーを識別するハンドルを返します。その後、カードリーダーにアクセスするときにすべての機能でそれを使用します。

于 2010-08-31T08:32:54.990 に答える
1

この関数のセットを共有ライブラリ(libCardReader.soなど)に配置し、ヘッダーファイルをプログラマーに渡して、コードで参照および使用することができます。次のリンクは、SOファイルの作成に関する非常に優れたイントロを提供します(http://www.network-theory.co.uk/docs/gccintro/

于 2010-09-01T01:41:28.603 に答える
1

私の2セント:

どのように出力を提供するかは、ユーザーによって異なると思います。この人は同じ会社/プロジェクトであなたと緊密に協力していますか、それとも外部の情報源に行きますか?

外部に移行することで間違いなくライブラリになる場合は、他のユーザーが心配することが少なくなるため、他の場合にもライブラリを作成する方が簡単な場合があります。

あなたのコードはより大きなプロジェクトに統合されますか?その場合は、このプロジェクトのサブフォルダーにコードをビルドして、必要な関数をサブフォルダーに提供する必要があります。この部分は何よりも主観的だと思います。

ポートの開閉に関しても、それがどのように機能するかによって異なります。他のプログラマーが使用するためのAPIを単に提供している場合(そしてそれがどのように機能するかわからない場合)、私はそれをinitCardReader/closeCardReader関数呼び出しに抽象化すると言います。そうすれば、ユーザーが複数のトランザクションを実行したい場合、呼び出しごとに処理時間を無駄にすることを心配する必要はありません...彼は自分の裁量で簡単に開閉できます。

そして、あなたがカードリーダーデバイスドライバーのAPI呼び出しを書いているように私には聞こえます;)

于 2010-08-31T08:32:29.900 に答える