3

私は、あるタイプの組み込みプロセッサ用に特別に作成された「C」コード ベースに取り組んでいます。LED、GPIO ライン、ADC (構造体などを使用) などの一般的な「疑似オブジェクト指向」コードを作成しました。また、これらの「オブジェクト」をハードウェア/ターゲットに依存しない方法で利用する大量のコードも作成しました。

現在、別の種類のプロセッサをミックスに投入していますが、現在のコード構造を維持して、より高いレベルのライブラリを引き続き利用できるようにしたいと考えています。ただし、下位レベルのコード (LED、GPIO、ADC) にはさまざまな実装を提供する必要があります。

.C ファイルの #includes が一般的に見下されていることは知っていますが、この場合は適切ですか? 例えば:

// led.c
#ifdef TARGET_AVR
#include "led_avr.c"
#elseifdef TARGET_PIC
#include "led_pic.c"
#else
#error "Unspecified Target"
#endif

これが不適切である場合、より良い実装は何ですか?

ありがとう!

4

3 に答える 3

3

リンカーはソース ファイルの実際の名前を気にしない (エクスポートされたシンボルのみを気にする) ため、各ターゲットのリンカー コマンド ラインを変更して、適切な実装モジュール (led_avr.cまたはled_pic.c) に名前を付けることができます。

複数のプラットフォーム ソース ファイルを管理する一般的な方法は、プラットフォーム実装ファイルの各セットを独自のディレクトリに配置するavr/led.cことpic/led.cです。avr/gpio.cpic/gpio.c

于 2010-10-03T22:23:01.163 に答える
2

いいですね。次のような他のトリックを使用できます。

#ifdef PROC1
#define MULTI_CPU(a,b) (a)
#else
#define MULTI_CPU(a,b) (b)
#endif
于 2010-10-03T22:22:53.797 に答える
0

これを行うより一般的な方法は、C ファイルを含める代わりに、ビルド システム (それが何であれ) を変更して、それらの特定の C ファイルをコンパイルするかコンパイルしないようにすることです。

于 2010-10-03T22:23:22.757 に答える