volatile告诉编译器:这个变量的值可能被程序控制之外的地方改变,读它时不要缓存优化、每次都真读。
| volatile | const | 关键区别 |
|---|---|---|
| 值可能外部改变 | 值不应被修改 | volatile 禁缓存优化,const 允许优化 |
| 用于中断/硬件/多线程共享变量 | 用于只读数据 | 语义相反但可共存 |
const volatile 合法 |
只读硬件寄存器场景 | 既只读又可能被硬件改变 |
const volatile uint32_t *reg = ... 合法吗? → 合法。依据:只读硬件寄存器(如状态寄存器)"volatile 告诉编译器别对这个变量做缓存优化,因为它可能被中断、硬件或别的线程修改。我项目里光敏传感器中断里更新的标志就加了 volatile,否则主循环可能读到缓存里的旧值。"
2026-08-02