对于上面假设场景比如100来自外部键盘输入输入后存入变量a。while循环默认一直循环。当外界有新的输入不为10 对于上面假设场景比如100来自外部键盘输入输入后存入变量a。 while循环默
对于上面假设场景比如100来自外部键盘输入输入后存入变量a。
while循环默认一直循环。
当外界有新的输入不为100则跳出死循环执行mylcd
编译器编译后的汇编
f1从内存取数据存入寄存器R0
f2比较R0与立即数100
f3如果相等则调到f1
f4如果不等执行mylcd
如果没有volatile 去修饰变量a则编译器可能会做出如下优化每次取都是从同一个内存地址去取默认会以为来自同一个地址的值不会改变于是优化为只取一次对于频繁访问的变量默认放到寄存器从第2轮循环开始就不再继续从内存去取数据读内存要比读寄存器慢很多而是直接从寄存器中去取。这样如果后续键盘输入的值若发生改变则内部逻辑不会响应。与设计初衷不符。
volatile常用于硬件开发与外界硬件交互的场合。