This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

volatile

在 28069的头文件中看到好多 extern volatile 这是什么意思 volatile代表什么

  • volatile 告诉编译器该变量是随时可能发生变化的,每次使用它的时候必须从变量的地址中读取。编译器不要进行优化。

  • 例如:

    volatile unsigned char var;

    void test(void)

    {

       a = var;

       b = var;

       ……

    }

    如果不声明volatile,第二次读var的值,编译器将会使用第一次a = var;时获得的var值, 在这期间,编译器会假设var不会被外部中断、或者别的函数改变。

    但是,实际上,如果var可能是寄存器值或者被中断程序和应用程序共享的全局变量,两次读取之间,var的值可能会被修改,如果不声明为volatile,则会得到一个旧的值。

    如果对变量声明为volatile,则编译器不会对这个变量做任何假设。

  • 这是C语言的关键字,基础知识,建议查看C语言基本教程或百度搜索一下就了解了。

  • 读的时候volatile是不是可以控制编译器不从Cache中读取该变量?那写呢,如果存在Cache中,是不是也会直接绕过Cache操作变量的地址呢。

    如果我使能了cache,是不是可以通过volatile关键字实现绕过cache呢?

  • 目前的C2000芯片上还没有Cache.