2016-06-15 3 views
0

У меня есть массив. Я использую его из основной программы. Я использую его из ISR. Должен ли я всегда определять его как изменчивый? Какая оптимизация может применяться компилятором к моему массиву?Использование массивов и летучих

ответ

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]; 
+0

Спасибо. Я знаю это. Я задавался вопросом только о массивах. Если вы говорите «не имеет значения», я буду использовать «изменчивый». – koluna

Смежные вопросы