考虑到我的应用程序中有多个“.c”源文件。
Module1.c
static char status_variable = 0;
Modify1()
{
status_variable = 'a';
}
Modify2()
{
status_variable = 'x';
}
char GetStatus()
{
return status_variable;
}
可以根据事件从其他.c文件调用函数Modify
(不通过ISR)
Module2.C
TakeAction()
{
if(GetStatus() == 'a')
{
//do something
}
else
{
//do something
}
}
现在我的问题是,我需要在这种情况下将status_variable
声明为volatile
吗?
EDIT1:
我的应用程序16位微控制器(RL78),我没有使用任何操作系统。
EDIT2:
正如一些人评论的那样,多线程根本不在我的脑海里。我已经为我的应用程序写下了一个简单的非抢占式循环调度程序。我不知道多线程环境以及是什么让变量在这种情况下变得不稳定。它与我的环境有什么不同?如果有人可以详细说明它那么它将是一个很大的帮助。
答案 0 :(得分:4)
由于declare @sql nvarchar(max);
declare @Out1 nvarchar(10);
declare @Out2 nvarchar(10);
declare @ParmDef nvarchar(max);
set @ParmDef =
' @Parm_Out1 nvarchar(10) '
+ ', @Parm_Out2 nvarchar(10) ' ;
set @sql='EXEC myproc @Parm_Out1 OUTPUT, @Parm_Out2 OUTPUT '
exec sp_executesql @sql, @ParmDef, @Parm_Out1 = @Out1, @Parm_Out2 = @Out2
未绑定到任何:
您可以安全地跳过status_variable
声明中的volatile
关键字。
答案 1 :(得分:1)
如果模块可以像@ BlueMoon93那样同时运行(如果线程没有其他锁定机制),你肯定应该使用volatile。但是如果这些模块一个接一个地运行,那么你可以安全地跳过volatile的使用。