volatile 关键字和const对应，一样是一种类型修饰符，用它修饰的变量表示可以被某些编译器未知的因素更改，比如操作系统、硬件或者其它线程等。遇到这个关键字声明的变量，编译器对访问该变量的代码就不再进行优化，从而可以提供对特殊地址的稳定访问。当要求使用 volatile 声明的变量的值的时候，系统总是重新从它所在的内存读取数据，即使它前面的指令刚刚从该处读取过数据

volatile的三个应用场景
a、中断服务程序中修改的（供其它程序检测的）变量需要加 volatile；
b、多线程应用中被几个任务共享的变量应该加 volatile；
c、并行设备的硬件寄存器（如：状态寄存器）