让我解释一下我所说的数据一致性问题。以以下场景为例
uint16 x,y;
x=0x01FF;
y=x;
显然,这些变量是 16 位的,但如果使用 8 位 CPU 和这段代码,读或写操作将不是原子的。从而可能在两者之间发生中断并更改值。这是可能导致数据不一致的一种情况。
这是另一个例子,
if(x>7) //x is global variable
{
switch(x)
{
case 8://do something
break;
case 10://do something
break;
default: //do default
}
}
在上面的摘录代码中,如果一个中断在 if 语句之后但在 switch 语句之前将 x 的值从 8 更改为 5,我们会以默认情况结束,而不是情况 8。
请注意,我正在寻找检测此类情况的方法(但不是解决方案)
是否有任何工具可以检测嵌入式 C 中的此类问题?