如果不加这个voliatile修饰,程序是利用catch当中的数据,那个可能是过时的了,加了 voliatile,就在需要用的时候,程序重新去那个地址去提取,保证是最新的。如:while((unsigned char *)0x20)时,有时系统可能不真正去读0x20的值,而是用第一次读出的值,如果这样,那这个循环可能是个死循环。用了volatile 则要求每次都去读0x20的实际值。
1. volatile变量可变允许除了程序之外的比如硬件来修改他的内容 。
2. 访问该数据任何时候都会直接访问该地址处内容,即通过cache提高访问速度的优化被取消,提高访问速度,并且确保当前读取到的值是最新的数据值。