让我解释数据一致性问题的含义.以下面的场景为例
uint16 x,y;
x=0x01FF;
y=x;
Run Code Online (Sandbox Code Playgroud)
显然,这些变量是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
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的摘录代码中,如果中断在if语句之后但在switch语句之前将x的值从8更改为5,那么我们最终会出现默认情况,而不是情况8.
请注意,我正在寻找方法来检测这种情况(但不是解决方案)
是否有任何工具可以检测嵌入式C中的此类问题?