哪里用volatile?

Poi*_*ter 7 c compiler-construction operating-system volatile linux-device-driver

我读过volatile关键字,但我不知道在什么情况下我应该使用它.

当内存(变量)得到更新并且进程没有意识到这一点?

在什么情况下驱动程序应该使用volatile变量?

Dav*_*ave 12

我的世界中最常见的情况是编程使用内存映射I/O的微控制器.由于外部数字输入,寄存器中的值可能会发生变化,但如果不将变量声明为volatile,则编译器可能会完全优化代码,您会想知道为什么没有任何作用.

Matt建议我修饰关于代码被"优化"的声明.通过指针在代码中访问内存映射的I/O. 当您想要检查按钮的状态时,通常会按位与按钮的位掩码对应寄存器的值.如果你没有指定volatile,编译器会说,"嘿,你的代码实际上永远不会改变那个指针的值,所以我只是删除那个你按位进行AND运算的语句,因为值总是相同!".

希望这有点清楚我的陈述.谢谢你的建议,马特.


caf*_*caf 5

由于您已使用标签对其进行了标记linux-device-driver,因此可能需要一些在 Linux 内核中进行编码的具体建议。

一般来说,您不需要编写volatileLinux 内核代码。在可能需要的情况下volatile,它的使用包含在您应该调用的核心内核函数中。例如,如果您正在执行内存映射 I/O,那么您应该使用ioremap()writel()readl()