1、volatile关键字简介
volatile是 C/C++/Java 等语言中的一个类型修饰符,它的核心作用是告诉编译器:被修饰的变量的值可能会在程序控制范围之外被改变,因此每次使用时都必须重新从内存读取,不能进行优化,优化可减小bin文件大小。
2、主要用途
①硬件寄存器映射:变量的值可能由硬件(如外设状态寄存器)自动更新,编译器不能假设它不变。
②中断服务程序(ISR)中修改的全局变量:主程序和中断都会访问该变量,防止编译器优化掉看似多余的读取。
③RTOS多线程共享的变量(在没有锁机制时):一个线程修改,另一个线程读取,避免因优化导致读取不到最新值。
3、案例分析![]()
将优化等级改为3级:
经过对比发现有差异的代码如下:
分析汇编代码:
①未开优化前
②开启优化后
原因分析:开了编译器优化后,编译器优化代码时没有识别出主流程和中断流程是并发执行,所以没有修改全局变量。
加入volatile修饰: