使用数组和volatile

时间:2016-06-15 15:54:45

标签: parameter-passing avr volatile

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

1 个答案:

答案 0 :(得分:2)

如果您声明int,然后再读两次,编译器就可以记住'第一次阅读,而不是再次阅读它。

static int value = 0;

void ISR() {
    ++value;
} // ISR()

int main() {
    while (value==0) {
       // Do nothing
    } // while
} // main()

编译器可以读取value一次,然后一遍又一遍地测试它,始终为零! ISR改变它,但编译器没有"看到"那种变化。

如果您将value标记为volatile,那么编译器将始终读取它:它永远不会记住它:

static volatile int value = 0;

如果它是一个数组并不重要:可能会发生同样的问题。

static volatile int array[256];
相关问题