volatile提醒编译器它后面所定义的变量随时都可能发生改变,因此编译后的程序每次需要读取这个变量的时候,都会从内存直接读取。
如果没有volatile关键字,则编译器可能优化读取和存储,可能展示使用寄存器中的值,如果这个变量由别的程序更新了的话,可能出现不一致现象。
一个变量可以既是const又是volatile型的,如只读状态寄存器,是volatile是因为它可能意想不到的被改变,是const告诉程序不应该试图去修改他。
volate一般用在以下场景
-
- 中断服务程序中修改的供其它程序检测的变量需要加 volatile;
-
- 多任务环境下各任务间共享的标志应该加 volatile;
-
- 存储器映射的硬件寄存器通常也要加 volatile 说明,因为每次对它的读写都可能由不同意义;