micros() function

JetC spotted an issue with micros() when called from within an ISR. The error would be up towards 1024 micro seconds. In the proposed fix however we failed to account for the possibility that overflow may occur in between reading TCNT0 and checking for the overflow. E.g. as in the following:

overflow is false
t = TCNT0 // value is 255
overflow occurs
test for overflow is now true and we incorrectly add 256 to t

The original code avoided this scenario with the "(t == 0)" test and this would be ok unless micros() was called from within an ISR. The following fix however should take care of all the identified scenarios:

unsigned long micros() {
         unsigned long m;
         uint8_t oldSREG = SREG, t;
        
         cli();  
         m = timer0_overflow_count;
         t = TCNT0;
  
 #ifdef TIFR0
         if ((TIFR0 & _BV(TOV0)) && (t < 255))
                 m++;
 #else
         if ((TIFR & _BV(TOV0)) && (t < 255))
                 m++;
 #endif

         SREG = oldSREG;
        
         return ((m << 8) + t) * (64 / clockCyclesPerMicrosecond());
 }