2016-06-15 6 views
0

Ich habe ein Array. Ich verwende es aus einem Hauptprogramm. Ich verwende es von einem ISR. Muss ich es immer als volatil definieren? Welche Optimierung kann der Compiler auf mein Array anwenden?Verwenden von Arrays und flüchtige

Antwort

2

Wenn Sie eine int deklarieren und dann zweimal lesen, kann der Compiler den ersten Lesevorgang "erinnern" und sich nicht darum kümmern, ihn erneut zu lesen.

static int value = 0; 

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

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

Der Compiler value einmal, und dann testen, immer und immer wieder, immer als Null lesen konnte! Das ISR ändert es, aber der Compiler "sieht" diese Änderung nicht.

Wenn Sie value als volatile markieren, dann wird der Compiler es immer lesen: es wird sie nie vergessen:

static volatile int value = 0; 

Es spielt keine Rolle, ob es ein Array ist: das gleiche Problem passieren könnte.

+0

Danke. Ich weiß es. Ich habe mich nur mit Arrays beschäftigt. Wenn Sie "nicht wichtig" sagen, verwende ich "flüchtig". – koluna