Ami*_*mar 1 c volatile embedded-linux
以下链接说"始终未访问设备寄存器的访问权限"
我的问题是,当访问存储器映射的设备寄存器时,我们是否需要易失性?
这里的困惑来自两个机制,它们的目标有相似之处,但机制和实施水平截然不同.
该链接指的是存储器映射的I/O区域被配置为不适合快速中间存储器中的硬件高速缓存,用于加速操作与访问较慢的主存储器库相比.传统上,这对软件几乎是透明的(例外是在具有不同指令和数据缓存的机器上修改代码).
相反,volatile用于禁止优化编译器通过策略性地将它们保存在寄存器中来执行值的"软件"缓存,延迟计算它们直到需要,或者如果不需要则可能永远不计算它们.基本效果是通知编译器该值可能由其分析不可见的机制产生或消耗 - 可以是当前处理器核心之外的硬件,也可以是不同的线程或执行上下文.