我读到在某些情况下(全局变量或 while(variable) 等)如果变量未定义为 volatile
可能会导致问题。
如果我将所有 变量都定义为volatile 会导致问题吗?
最佳答案
如果当前作用域或任何后续子作用域之外的东西(想想:函数调用)可以修改您正在使用的变量(有一个定时器中断会增加您的变量,您将 var 的引用提供给其他人可能响应中断等做某事的代码)那么变量应该声明为 volatile。
volatile 是对编译器的提示,“其他东西可能会改变这个变量。”编译器的 react 是,“哦。好的。我永远不会相信我在寄存器或堆栈中的这个变量的副本。每次我需要使用这个变量时,我都会从内存中读取它,因为我的副本在寄存器中可能已经过时了。”
将所有内容都声明为 volatile 会使您的代码变慢很多,并导致更大的二进制文件。正确的答案不是这样做,而是了解需要标记 volatile 的内容,为什么这样做,并适本地标记。
关于c - 如果在 AVR 编程中所有变量都定义为 volatile 是不是很糟糕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17708835/