在以下情况下我应该使用 '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 的使用。
考虑到我的应用程序中有多个“.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 的使用。