挥发性的替代品?

时间:2013-10-04 19:55:19

标签: c gcc embedded c99 volatile

我在我的嵌入式固件中使用了很多volatile个变量,但大部分时间我只需要一个函数中的一个点,我需要确定该值是最近的(在开始时)。但是函数的其余部分引用了相同的变量名,并且值可以在平均时间内更改,从而产生非常意外的代码流/结果。我知道这可以通过在函数内部使用临时变量来解决,但我一直在寻找更好的解决方案。

现在我想知道,而不是将整个变量标记为volatile,是否有一种方法可以指示编译器(gcc)使用特殊关键字,我想要读取变量,就像它被标记为volatile一样,所以我只能在函数开头使用该关键字一次?

2 个答案:

答案 0 :(得分:0)

我对这个场景感到有点困惑 - 如果你希望一个特定的访问变量被视为volatile,请使用

dest = *(volatile TYPE *)&src;

其中TYPE是src的类型。您可能还需要

asm volatile ("" ::: "memory");

在精心控制的位置,以防止编译器在易失性读取中移动其他内存位置的加载/存储。

同时调查C11的_Atomic类型。 (我不确定GCC是否支持这些。)

答案 1 :(得分:0)

如果您的变量在内存中并且您的嵌入式系统支持它,则可以使用内存屏障。确保在读取值时不会访问内存。

相关问题