Volatile在MCU主要用来防止编译器对程序优化而导致程序无法实现预期的结果,其一般在MCU中用于定义特殊寄存器、中断函数中使用的变量以及为某些特殊用途的代码定义的变量(如delay功能)。那么加不加volatile的区别在哪里?
加volatile和不加Volaitle的区别在于加了volatile的变量,程序在获取该变量的具体数值时是直接从内存中获取而不是从cache中获取,这里以合泰的编译生成的汇编指令为例来进行说明:
编译器:HT-IDE3000-7.97
芯片:BS86E16C
代码如下:
如上图所示,当WFTEST分别为0和1时生成的汇编代码如下所示:
上图中作图为WFTEST为0时的汇编代码,而右图的为1,可以看出在右图中,无论对volatile修饰的变量(wftest)是赋值还是取值进行对比,其都是通过_wftest[0]直接获取,而不加volatile的则不是每次调用变量时都直接去读取_wftest[0],而是用a代表变量_wftest[0],对比等操作会使用a而不是_wftest[0],仅在对_wftest[0]进行读写时不使用a。
&nb