Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parameter passing 使用数组和volatile_Parameter Passing_Avr_Volatile - Fatal编程技术网

Parameter passing 使用数组和volatile

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()

我有一个数组。 我从主程序使用它。 我从ISR使用它。 我是否必须始终将其定义为易失性?
编译器可以对我的数组应用什么优化?

如果声明一个
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”。谢谢。我知道。我只想知道数组。如果你说“不重要”,我会用“挥发性”。