volatile易变的,加上后编译器不会对其进行优化
主要用在三个方面
1 多线程共享的全局变量
2 中断程序
3 状态寄存器
比如一个状态寄存器你连续读取两次, int netconf_1, netconf_2;
netconf_1 = *(int * )0x56000004;
netconf_2 = *(int * )0x56000004;
很可能就会被优化成 netconf_2 = netconf_1 = *(int *)0x56000004;
但是这可能不是你想要的,因为在读取的过程中状态寄存器内容会被硬件自动改写的,可能是不同的值。