1

よし、extern 定義がどのように機能するかは理解できたが、それらを配置するのに「最適な」場所が何かはわからない。次のファイル構造を考慮してください。

  • main.c / main.h / global.h
  • drv_adc.c / drv_adc.h
  • drv_pwm.c / drv_pwm.h

ご想像のとおり、これは小さなマイクロコントローラーでは非常に一般的です。2 つのドライバーは、ハードウェアの異なる部分で動作し、相互依存関係はありません。どちらのドライバーも、何かが発生したことを示し、main.c で処理されるフラグ (adc_irq_occured、pwm_irq_occured など) を設定できます。

ここで、「extern bool adc_irq_occured;」を配置する 2 つのアプローチを考えることができます。国旗。

  • drv_adc.h: ADC ドライバーに属しているため、ヘッダー ファイルに追加して、main.c でインスタンス化することができます。
  • ロジックを逆にして、extern 宣言を main.h (または必要に応じて global.h) に配置し、drv_adc.c でインスタンス化します。

ここで質問: ここで推奨されるオプションはどれですか? そのようなトピックについて読むことができる良い本はありますか?

4

1 に答える 1

1
In main.c:
int flag = 0;

In main.h:  
extern int myGlobal;


In drv_adc.c: 
#include "main.h"

In drv_pwm.c:
#include "main.h"

変数がグローバルになったため、安全性が低くなるため、注意して使用し、他の drv ファイルによって改ざんされないようにしてください。

- 編集 - なぜ逆にしないのですか?

他のファイルに含まれるヘッダーにextern 宣言を入れます。これは、一度宣言して、ヘッダーに含めた両方のdrvファイルで使用できるフラグ変数の共通バージョンが 1 つだけであることをコンパイラーに伝えるためです。より明確にするために、この説明をお読みください。変数を source に入れます

于 2013-03-07T19:02:20.320 に答える