如果在AVR编程中将所有变量定义为volatile,那会不好?

Joh*_*der 7 c avr atmega volatile

我读过在某些情况下(全局变量,或while(变量)等),如果未定义变量volatile,可能会导致问题.

如果我将所有变量定义为volatile,会导致问题吗?

小智 11

如果当前作用域之外的东西或任何后续子作用域(想想:函数调用)可以修改你正在使用的变量(有一个定时器中断会增加你的变量,你可以将var引用到其他一些代码中做一些事情以响应中断等)然后变量应该被声明为volatile.

volatile是对编译器的暗示,"其他东西可能会改变这个变量." 并且编译器的响应是,"哦.好的.我永远不会相信我在寄存器或堆栈中的这个变量的副本.每次我需要使用这个变量时我会从内存中读取它,因为我的副本在寄存器中可能已经过时了."

声明一切易失性将使您的代码减慢很多并导致更大的二进制文件.而不是这样做,正确的答案是了解需要标记为volatile的内容,它为什么以及适当标记.