1

我在一个源文件中定义了一个名为“ledFlag”的全局变量,该源文件还有一个用于按钮连接到中断引脚的 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;
}

//粗略的插图。

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 回答