2

AVRMCU用の静的ライブラリを書いています。私はavr-gccとAVRLibcを使用しています。一部のライブラリ関数は、SPIを使用してデバイスと通信します。ただし、SPI通信はすべてのAVR MCUで同じ方法で行われるわけではありません(すべてのAVR MCUが同じレジスタを持っているわけではありません)。それはビッグバンギングによってさえ行うことができます。したがって、特定のアプリケーション用に、ユーザーが独自のSPIルーチンを提供するようにします。

これどうやってするの?すべてのライブラリ関数は、追加の引数としてコールバック関数を取る必要がありますか?ライブラリ内にSPIハンドラーとして機能するグローバル変数が必要ですか?関数を(を使用して)外部にする必要がありますexternか?

ありがとうございました、

4

1 に答える 1

4

単純で簡単な解決策は、適切な名前のextern関数を宣言することです。これにより、extern関数がまだ存在しない状態でライブラリをコンパイルできます。ただし、適切な機能を提供しなければ、あなたもあなたのユーザーも完全な実行可能ファイルをリンクすることはできません。

私はこのアプローチを自分で使用し、それをお勧めします。不必要な複雑さを回避し、すべてのCプログラミング環境にとって絶対的に基本的ではないものを使用します。重要なことに、明らかなエラーは実行時ではなくビルド時にフラグが付けられます(未定義のコールバック関数が呼び出されるときにランタイムクラッシュが発生することはありません)。

于 2011-02-09T22:56:20.080 に答える