micros() help

Here is my code.When i is 100,the result of the serial is 96.But When i is 10000,the result is still 96.If i change"a++" into "Serial.print(1)",the result changed. :~

void setup(){
  Serial.begin(9600);
}
void loop(){
  long i,a;
  for(i=0;i<100;i++){a++;}
  Serial.println(micros());
  exit(1);
}

Shouldn't you be declaring "a=0" instead of just "a" ?

probably an optimization issue, the compiler probably knew that "a" was useless and didn't bother running your for-loop, but if you tell it to output "1", then it's forced to actually send that out the serial port, thus the for-loop remained in that case

solve the problem by using a NOP instruction in the for-loop, that's what I would do. Or make "i" volatile.

I got the result after added "Serial.println(a)"and change "a++" into "a+=2".
It proves that the compiler is smart! :slight_smile:
Thanks for your time!

Qualify 'a' as "volatile".