2016-11-20 14 views
0

私は組み込みプロジェクトで作業していますが、私の質問は一般的なベストプラクティスの詳細です。ライブラリをコンパイルするためにextern宣言された変数を定義する場所

私は、マイクロコントローラ上でペリフェラルを動作させるソースファイルを作成しています。ヘッダファイルでは、正しく動作するために必要な2つのバッファが宣言されています。それらはISR内部動作するようになっているので、コンテキストのビットについて

extern volatile struct my_buffer peripheral_Tx_Buffer; 
extern volatile struct my_buffer peripheral_Rx_Buffer; 

彼らはvolatileあり、struct my_bufferアレイ、読み書きヘッドからなる単純な円形のバッファです。

今のところすべてが大丈夫ですが、私はライブラリにコンパイルして、すべてを公開することなく他の人にソースコードを与えることができます。さて、これはこれまでに書かれた最も巧妙なコードや革命的なコードではありませんが、私は自分自身にあるものを保つことを好みます。とにかく、それはポイントではありません!

私が知りたいことは、2つのバッファを定義することです。それらはグローバルであるため、ユーザーはperipheral_Rx_Bufferに格納された着信データを処理し、peripheral_Tx_Bufferを介して周辺機器に書き込むことができます。

ライブラリーが他のプロジェクトに使用されるたびに定義する義務は、最終的なユーザー(将来の私かもしれません)にパブリックヘッダーで宣言されているためです。例えば、プログラムのメイン部分、すなわちmain()が存在する場所にそれらを定義する。

pheripheral.cでライブラリをコンパイルすると、ライブラリが実際に存在することがわかります(エラーの可能性のあるソースを削除します)。

私は何をするべきですか?どのようなドキュメントですか?

答えて

0

私は両方のバッファーをカプセル化することをお勧めします - それらを静的にソースファイルに入れてください。バッファーを公開する代わりに、ヘッダーファイルpublic APIにアクセスしてアクセスする(読み込み、書き込みなど)必要があります。 doxygenを使用すると、公開された関数を他の開発者にドキュメント化できます。このようにして、両方のバッファがコード内に1回だけ存在し、公開されたAPIで誰にでもアクセスできることを確認します。

さらに、エンド・ユーザーが両方のバッファーでできることを制限することができます。アクセス・ファンクションは、必要な方法で書き込みます。

関連する問題