在以下情况下我应该使用 'Volatile' 吗?

Should I use 'Volatile' in following case?

考虑到我的应用程序中有多个“.c”源文件。

Module1.c

static char status_variable = 0;

Modify1() 
{

   status_variable = 'a';

}

Modify2() 
{

   status_variable = 'x';

}

char GetStatus()
{
   return status_variable;
}

函数 Modify 可以根据事件从其他 .c 文件中调用(不是通过 ISR)

Module2.C

TakeAction()
 {
    if(GetStatus() == 'a')
    {
        //do something
    }
    else 
    {
        //do something
    }

}

现在我的问题是,在这种情况下,我是否需要将 status_variable 声明为 volatile

编辑 1:

我的应用程序是 16 位微控制器(RL78),我没有使用任何操作系统。

编辑 2:

正如一些人评论的那样,多线程根本不在我的 mind.I 中,我已经为我的应用程序写下了一个简单的非抢占式循环调度程序。我不知道多线程环境,也不知道是什么让变量变得不稳定,因为 case.How 它与我的环境不同?如果有人可以详细说明它,那将是一个很大的帮助。

由于 status_variable 未绑定到任何:

  • 内存映射外设寄存器
  • 被中断服务程序修改的全局变量
  • 多线程应用程序中的全局变量

您可以安全地跳过 status_variable 声明中的 volatile 关键字。

如果模块可以像@BlueMoon93 所说的那样同时 运行(如果没有其他线程锁定机制),那么您绝对应该使用 volatile。但是如果这些模块是一个接一个 运行 那么你可以安全地跳过 volatile 的使用。