如何处理嵌入式系统中的标志变量

时间:2014-03-06 10:45:15

标签: variables embedded flags

我在嵌入式系统上做一个项目,我在中断时更改标志变量'x_flag'。此标志变量是 global ,并在其他源文件中访问,以检查事件的状态。

我知道处理全局变量的麻烦,但我想问你如何在其他源文件中访问'x_flag'的当前状态?

2 个答案:

答案 0 :(得分:4)

公开变量的正确方法是在拥有它的类中创建一个GetXFlagState()函数。这样,所有者类仍然可以控制。

答案 1 :(得分:4)

在您的c文件中,您可以将其定义为

volatile int x_flag;

void myISRFunction(void)
{
    x_flag = 1;
}

在头文件中添加声明

extern volatile int x_flag;

然后您只需要包含其他c文件中的头文件即可访问x_flag

但是你应该在访问/修改标志时禁用中断。

#include "myISR.h"

void someFunc()
{
  int local_x_flag;

  disableInterrupts();
  local_x_flag = x_flag;
  x_flag = 0;
  enableInterrupts();

  if ( local_x_flag )
    doSomething();
}

请注意,如果该标志实际上是硬件寄存器,则可能需要更加小心,因为禁用中断不会阻止硬件更改标志的值并明确清除它可能允许也可能不允许。在这种情况下,您需要仔细查看硬件文档,找出哪些是安全的(和/或与设计它的人交谈,如果您正在与硬件工程师合作)。