我有一个功能,我更新结构,并禁用中断。这里需要挥发吗?
bool readBuffer()
{
__disable_irq();
rb->reader += 1; // Just an example
__enable_irq();
return true;
}
由于中断被禁止,其不可能的另一个中断预抢占而1M的结构更新的值。
但是,我是否也应该将读取器变量标记为volatile
?由于理论上其他中断可能在我输入函数时抢先,但在实际调用__disable_irq()
之前。当我的函数恢复时,缓存的值rb->reader
将不正确。或者,编译器(GCC)生成的代码是否不缓存rb->reader
直到该行实际被击中?
也许可以参考Linus Torvalds的[挥发性认为有害](http://www.kernel.org/doc/Documentation/volatile-considered-harmful.txt)。 '__disable_irq()'是否作为隐式内存屏障?如果是的话,那么你不需要'易失性',并使用它只能伤害。 – Celada