我在我的嵌入式固件中使用了很多 volatile
变量,但大多数时候函数中只有一点我需要确保值是最新的(在开始)。但是函数的其余部分引用相同的变量名,同时可以更改值,从而产生非常意外的代码流/结果。我知道这可以通过在函数内使用临时变量来解决,但我一直在寻找更好的解决方案。
现在我想知道,不是将整个变量标记为 volatile
,有没有一种方法可以指示编译器 (gcc) 使用一个特殊的关键字,我想读取变量就像它一样被标记为 volatile,所以我只能在函数开头使用该关键字一次?
最佳答案
我对这种情况有点困惑 - 如果您希望对一个变量的特定访问被视为volatile
,请使用
dest = *(volatile TYPE *)&src;
其中 TYPE 是 src
的类型。您可能还需要
asm volatile ("" ::: "memory");
在仔细控制的位置,以防止编译器在 volatile 读取中移动其他内存位置的加载/存储。
同时研究 C11 的 _Atomic
类型。 (我不确定 GCC 是否支持这些。)
关于c - 替代 volatile ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19189671/