Parameter passing 使用数组和volatile
我有一个数组。 我从主程序使用它。 我从ISR使用它。 我是否必须始终将其定义为易失性?Parameter passing 使用数组和volatile,parameter-passing,avr,volatile,Parameter Passing,Avr,Volatile,我有一个数组。 我从主程序使用它。 我从ISR使用它。 我是否必须始终将其定义为易失性? 编译器可以对我的数组应用什么优化?如果声明一个int,然后读取它两次,编译器可以“记住”第一次读取,而不必再次读取它 static int value = 0; void ISR() { ++value; } // ISR() int main() { while (value==0) { // Do nothing } // while } // main()
编译器可以对我的数组应用什么优化?如果声明一个
int
,然后读取它两次,编译器可以“记住”第一次读取,而不必再次读取它
static int value = 0;
void ISR() {
++value;
} // ISR()
int main() {
while (value==0) {
// Do nothing
} // while
} // main()
编译器可以读取值
一次,然后反复测试,始终为零!ISR会对其进行更改,但编译器不会“看到”该更改
如果将value
标记为volatile
,编译器将始终读取它:它将永远不会记住它:
static volatile int value = 0;
它是否是数组并不重要:同样的问题也可能发生
static volatile int array[256];
如果声明一个
int
,然后读取两次,编译器就可以“记住”第一次读取的内容,而不必再次读取
static int value = 0;
void ISR() {
++value;
} // ISR()
int main() {
while (value==0) {
// Do nothing
} // while
} // main()
编译器可以读取值
一次,然后反复测试,始终为零!ISR会对其进行更改,但编译器不会“看到”该更改
如果将value
标记为volatile
,编译器将始终读取它:它将永远不会记住它:
static volatile int value = 0;
它是否是数组并不重要:同样的问题也可能发生
static volatile int array[256];
谢谢我知道。我只想知道数组。如果你说“没关系”,我会用“volatile”。谢谢。我知道。我只想知道数组。如果你说“不重要”,我会用“挥发性”。