1

1 つのソース ファイルで「ledFlag」という名前のグローバル変数を定義しました。このソース ファイルには、Interupt ピンに接続するプッシュ ボタン用の ISR もあります。プッシュ ボタンが押されると、ledFlag 変数が ISR に設定されます。メイン アプリケーションは別のソース ファイルにあるため、アプリケーション ファイルで ledFlag を extern としてデカールしました。しかし、私は変数エラーへの定義されていない参照を取得します。どうすれば修正できますか?ソース ファイルの編集に Source Insight を使用しています。

ソースファイル 1:

UINT32 ledFlag=0;
void ISR()
{
   status = readGpio...
   if (status == High)
   {
     ledFlag = 1;
   }
   else
   {}
}

ソースファイル 2:

extern UINT32 ledFlag;
main()
{
  if (ledFlag)
      dothis;
}

//ラフイラスト。

4

1 に答える 1

0

最初に、両方のファイルが一緒に適切にコンパイルされていること、および両方がプロジェクトに追加されていることを確認してください。

第二に、コンパイラが変数呼び出しを最適化して、短縮できないものと短縮できるものについて誤った仮定をしている可能性が最も高いです。

これを防ぐには、次のようにします。

ソースファイル 1

volatile UINT32 ledFlag=0;
void ISR()
{
   status = readGpio...
   if (status == High)
   {
     ledFlag = 1;
   }
   else
   {}
} 

ソースファイル 2:

volatile extern UINT32 ledFlag;
main()
{
  if (ledFlag)
      dothis;
}
于 2015-10-06T14:11:51.613 に答える