我有一个更新结构并禁用中断的功能。
bool readBuffer()
{
__disable_irq();
rb->reader += 1; // Just an example
__enable_irq();
return true;
}
因为中断被禁用,在我更新结构中的值时,另一个中断不可能抢占。
但是我是否也应该将阅读器变量标记为volatile
?因为理论上另一个中断可以在我进入函数时抢占,但__disable_irq()
实际上是在之前被调用。当我的功能恢复时,缓存的值rb->reader
将不正确。rb->reader
还是编译器(GCC)生成的代码在实际命中该行之前不会缓存?