我正在嵌入式系统上做一个项目,在这个项目中,我在中断时更改一个标志变量'x_flag‘。此标志变量是全局的,并在其他源文件中访问,以检查事件的状态。
我知道处理全局变量的困难,但我想问您如何访问其他源文件中的“x_flag”的当前状态?
发布于 2014-03-06 02:50:46
公开变量的正确方法是在拥有变量的类中创建一个GetXFlagState()函数。这样,所有者类就能保持控制。
发布于 2014-03-06 03:08:55
在您的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();
}
注意,如果标志实际上是一个硬件寄存器,您可能需要更加小心,因为禁用中断不会阻止硬件更改标志的值,并且显式清除它可能允许也可能不允许。在这种情况下,您需要仔细查看硬件文档,以确定哪些是安全的,哪些是不安全的(如果您正在与硬件工程师一起工作,请与设计它的人交谈)。
https://stackoverflow.com/questions/22222087
复制