我有一個功能,我更新結構,並禁用中斷。這裏需要揮發嗎?
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