Skip to content

Instantly share code, notes, and snippets.

@indraastra
Created September 14, 2015 22:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save indraastra/6e467d401b913d917517 to your computer and use it in GitHub Desktop.
Save indraastra/6e467d401b913d917517 to your computer and use it in GitHub Desktop.
Timing drift when interrupts disabled
void setup() {
pinMode(D4, OUTPUT);
Serial.begin(9600);
delay(5000);
uint32_t t0_m = millis();
uint32_t t0_u = micros();
Serial.print(micros() - t0_u); // Relative time 0.
Serial.print(", ");
Serial.println(millis() - t0_m); // Relative time 0.
digitalWrite(D4, HIGH);
delayMicroseconds(5000);
digitalWrite(D4, LOW);
Serial.print(micros() - t0_u); // Relative time 5000.
Serial.print(", ");
Serial.println(millis() - t0_m); // Relative time 5000.
__disable_irq();
digitalWrite(D4, HIGH);
delayMicroseconds(5000);
digitalWrite(D4, LOW);
__enable_irq();
Serial.print(micros() - t0_u); // Relative time 10000.
Serial.print(", ");
Serial.println(millis() - t0_m); // Relative time 10000.
digitalWrite(D4, HIGH);
delayMicroseconds(5000);
digitalWrite(D4, LOW);
Serial.print(micros() - t0_u); // Relative time 15000.
Serial.print(", ");
Serial.println(millis() - t0_m); // Relative time 15000.
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment