在应用程序中使用的volatilevariables

我在这个领域是新的。 以前我在做微控制器编程,我使用了volatilevariables来避免编译器优化。 但是我从来没有在variables声明之前看到这样的volatilevariables 这是否意味着编译完成没有Arago构build任何优化。 这里我有两个问题。

  1. 如何在编译期间启用不同types的优化,如在Angstrom构build中的速度和空间优化?

  2. 如果它已经是一个优化的编译,为什么我们不需要挥发性声明?

如果你使用gcc进行编译,那么添加/修改CFLAGS

  • -O2-O3以实现一系列通用性能优化。

  • Os来启用代码大小优化。

控制单个gcc编译器优化选项的一长串标志可以在这里找到


大多数情况下, volatile用于优化代码,但要确保数据的有效性 。

变量声明为volatile告诉编译器该变量可以在任何时候被外部修改

  • 操作系统
  • 另一个执行线程
    – 中断程序
    – 信号处理程序
  • 底层硬件

由于volatile限定变量的值可以随时更改,因此只要在代码中引用变量,就必须始终访问实际变量。

这意味着编译器不能对变量进行优化。 标记变量volatile强制编译器生成忽略CPU寄存器中变量的代码,并实际读取映射到变量引用的地址处的底层内存/硬件寄存器。

还要检查使用volatile的各个方面– 以及编译器优化