在哪里使用挥发性?[英] Where to use volatile?

本文是小编为大家收集整理的关于在哪里使用挥发性?的处理方法,想解了在哪里使用挥发性?的问题怎么解决?在哪里使用挥发性?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我阅读了有关挥发性关键字的信息,但是我不知道在什么情况下使用它.

当内存(变量)进行更新并且过程不知道时?

在什么情况下,驾驶员应使用挥发性变量?

推荐答案

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

Matt建议我修饰有关代码获得"优化"的声明.内存映射的I/O可以通过指针中的代码访问.当您要检查按钮的状态时,通常会在钻头上,并使用该按钮的位签名值.如果您不指定波动性,编译器会说:"嘿,您的代码实际上永远不会更改该指针的价值,所以我只需删除该语句您的位置,因为该值始终是同样!".

希望这能使我的陈述有所清晰.感谢您的建议,Matt.

其他推荐答案

当您用linux-device-driver标签标记了此标签时,可能会按顺序进行编码的一些具体建议.

通常,您不需要在Linux内核代码中编写volatile.在可能需要volatile的情况下,其使用将其包裹在核心内核功能中,您应该调用.例如,如果您要进行内存映射I/O,则应使用ioremap(),writel(),readl()等.

其他推荐答案

与他人所说的话不同,挥发性关键字通常是为了防止编译器形式进行优化. 在某些内存映射的寄存器中,寄存器的值不断更改(例如RTC时钟寄存器)挥发性关键字. 看看这个示例:

RTC_CLOCK _time;
TIME _currentTime = _time ;
while(_currentTime - _time >= 100)
{

//Do something

}

//rest of the code 

如果我们在时间之前不附加挥发性关键字,则此代码将像_currenttime -_time = 0一样,编译器将不会考虑其下方的WILE循环.:

RTC_CLOCK _time;
TIME _currentTime = _time ;
//rest of the code

为了防止这种情况,我们必须在时间上使用挥发性关键字.

本文地址:https://www.itbaoku.cn/post/359335.html