Zur Zeitmessung im Sub-Mikrosekundenbereich steht kein freier Timer zur Verfügung, sondern nur einer der bereits als PWM-Generator mit hoher Wiederholfrequenz arbeiten muss.
C++-Quelle | Kompilat | Verbesserung 1 | Verbesserung 2 | Verbesserung 3 |
---|---|---|---|---|
|
|
Unnötig gerette Register R0 und R1
|
Nur ein Rechenregister-Byte
| Gar kein (teures) push mehr
|
bei ≤ 8 KByte Flash | bei ≥ 16 KByte Flash |
---|---|
|
|
Da die ISR alle 150 Takte aufgerufen wird ist die CPU-Last auf einem ATmega16U2 vorher 29 % und nachher 17 %. Auf einem ATmega32U4 wiederum wäre gar keine ISR vonnöten, dieser hat einen Timer mehr.