我在一个源文件中定义了一个名为“ledFlag”的全局变量,这个源文件还有一个用于按钮连接中断pin的ISR。按下按钮后,将在ISR中设置ledFlag变量。由于主应用程序在另一个源文件中,我在应用程序文件中将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;
}

//粗略说明。

最佳答案

首先检查这两个文件是否已正确编译在一起,并且都已添加到项目中。
第二:编译器很可能优化变量调用,对它不能和可以缩短的部分做出错误的假设。
要防止这种情况,请执行以下操作:
源文件1

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

源文件2:
volatile extern UINT32 ledFlag;
main()
{
  if (ledFlag)
      dothis;
}

关于c - 未声明的对变量的引用。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32967777/

10-09 08:56