声明:以上摘抄自“嵌入式Linux那些事”的面试指南,非常好的博主,大家可以去关注他
volatile的使用:
① 编译器很聪明,会帮我们做些优化,比如:
int a;
a = 0; // 这句话可以优化掉,不影响a的结果
a = 1;
② 有时候编译器会自作聪明,比如:
int *p = ioremap(xxxx, 4); // GPIO寄存器的地址
*p = 0; // 点灯,但是这句话被优化掉了
*p = 1; // 灭灯
③ 对于上面的情况,为了避免编译器自动优化,需要加上volatile,告诉它“这是容易出错的,别乱优化”:
volatile int *p = ioremap(xxxx, 4); // GPIO寄存器的地址
*p = 0; // 点灯,这句话不会被优化掉
*p = 1; // 灭灯