HaWe:
Moment - und was ist mit Rechenzeit-konsumierenden Timer-Interrupts...?
Was soll damit sein?
Der Verbrauch von Rechenzeit, auch innerhalb von Interrupt-Behandlungsroutinen, ändert an der Korrektheit der Zeitzählung absolut nichts.
Erst wenn man selbst in einem Sketch eigene Interrupt-Behandlungsroutinen schreibt, die "zu lange" laufen oder man Interrupts für zu lange Zeit sperrt, können im System angeforderte Interrupts verlorengehen. Wobei "zu lange" bedeuten würde, dass ein anderer Interrupt bzw. eine Interruptsperrung länger laufen müßte als die Zeit zwischen zwei Timer-Interrupts, um einen Timer-Interrupt komplett ausfallen zu lassen.
Da die Timer0-Interrupts mit einem Takt von (glaube ich) einmal pro Millisekunde laufen, wäre "zu lange" also jede Interruptbehandlung, die länger als 1ms läuft. 1000 Mikrosekunden!
Wer bei klarem Verstand ist, schreibt Interrupt-Behandlungsroutinen, die vielleicht mal 4 oder 8 Mikrosekunden laufen. Im äußersten Notfall vielleicht mal eine mit einem "analogRead()", die dann 130 µs läuft. Aber man schreibt einfach keine Interruptbehandlungen von 1000 Mikrosekunden Dauer.
Und dann geht auch mit Interrupts oder bei gesperrten Interrupts keine Zählung verloren, sondern wird allenfalls mal um die Zeit einer Interruptbehandlung oder einer Interruptsperrung verzögert, also nach 4 oder 8 Mikrosekunden wieder "aufgeholt", weil dann der wartend gestellte Interrupt einfach etwas später ausgeführt wird.
In manchen Konfigurationen sperren allerdings Arduino-Programmierer die Interrupts für längere Zeit im Sketch, zum Beispiel bei der Ansteuerung von WS2812 LED-Controllern, da diese ein äußerst exaktes Timing benötigen, das mit laufenden Interrupts nicht einzuhalten ist. Solche Programme, in denen Interrupts "zu lange" gesperrt werden, um ein einwandfreies Timing aufrechtzuerhalten, sind allerdings eher die Ausnahme als die Regel, und wer so etwas programmiert sollte sich darüber im klaren sein was passiert, wenn er ellenlang die Interruptausführung im Programm blockiert.