​​90%嵌入式工程师必踩坑之volatile关键字,学会它轻松搞定面试官!!!

张开发
2026/4/8 21:28:46 15 分钟阅读

分享文章

​​90%嵌入式工程师必踩坑之volatile关键字,学会它轻松搞定面试官!!!
若想搞定什么是volatile关键字首先要清楚CPU的变量读取规则CPU 的运算单元ALU无法直接对内存中的变量做运算内存里的变量或外设寄存器中的变量必须先加载到 CPU 内部的通用寄存器才能被 CPU 读取、运算、修改—— 这是冯・诺依曼架构的核心规则几乎所有通用 CPU/MCU 都严格遵循。若想让RAM内存中的变量加载到寄存器中就必须要有load指令也就是我们在代码中给变量赋值的语句例如inta 0;如果编译器看到了你的赋值语句就会生成load指令此时CPU就知道应该去RAM外设寄存器中更新通用寄存器的值了如果没有int a 0的赋值语句则通用寄存器中的值将不会被更新。但是在我们的单片机开发中会频繁使用中断、多线程、硬件自动更新等操作会在编译器看不到的地方更改变量的值(例如如你的开发板按键按下)。这些都是编译器自动优化的结果因为CPU读取寄存器的速度要比读取内存其他外设寄存器的速度快得多如果没有在代码中显示赋值inta 0为了提高代码的效率CPU不会将IO口引脚的值更新到CPU内部通用寄存器中会直接读取寄存器所储存的旧值以追求更高的效率。因此在许多嵌入式开发工程师都会在开发的过程中关闭编译器自动优化防止漏写volatile关键字造成不必要的麻烦。关注我持续分享更多嵌入式干货痘印z1445435397

更多文章