9
在嵌入式C开发中使用volatile
我一直在阅读一些文章,并在Stack Exchange的答案中找到有关使用volatile关键字来防止编译器对可能以编译器无法确定的方式更改的对象进行任何优化的答案。 如果我正在从ADC读取数据(我们将其称为变量adcValue),并且将该变量声明为全局变量,那么volatile在这种情况下是否应该使用关键字? 不使用volatile关键字 // Includes #include "adcDriver.h" // Global variables uint16_t adcValue; // Some code void readFromADC(void) { adcValue = readADC(); } 使用volatile关键字 // Includes #include "adcDriver.h" // Global variables volatile uint16_t adcValue; // Some code void readFromADC(void) { adcValue = readADC(); } 我问这个问题是因为在调试时,虽然最佳实践表明(在我的情况下(直接从硬件更改的全局变量))volatile是强制性的,但我看不出两种方法之间的区别。