Ist ja logisch, die Schleife wird solange ausgeführt, wie flag nicht 0 ist.Code:Flag=1; while(Flag) { start_some_timer(); //generates overflow interrupt after some time Flag=0; }
Da flag aber beim ersten durchlauf auf 0 gesetzt wird, wird die
Schleife nur einmal durchlaufen. Der Compiler erkennt das
und optimiert das so, dass im Assembler kein Sprungbefehl mehr
vorkommt.
Die For-Schleife läuft immer durch und start...() wird aufgerufen wenn
flag gesetzt ist, danach wird flag gelöscht.
Wenn du genau das Erreichen willst ersetz einfach for(;; ) durch
while(1).
Lesezeichen