Schön dass es funktioniert.
Ich muss Dir nur widersprechen was die Aussage betrifft dass man keinen exklusiven Zugriff braucht wenn in der ISR nicht geschrieben wird.
Das Problem ist daß das ppm Array ein int Array ist, und daher immer 2 load/store opcodes zum Ändern eines Wertes gebraucht werden.
Die Werte sind ja Microsekunden und sollten zwischen 1000 und 2000 sein.
Die ISR kann auch zwischen den beiden store opcodes zuschlagen. Dann kriegst du das H Byte vom neuen Wert und das L Byte vom alten Wert weil das H Byte vor dem L Byte geschrieben wird.
Beispiel:
alter Wert 1040 uSec (H = 4, L = 16)
neuer Wert 1020 usec (H = 3, L = 252)
Dann wird H=3, L=16 gelesen was 256*3+16 = 784 uSec ergibt.
Kann sein dass es deinen Code nie trifft, weil es sich vom timing her nicht ergibt.
Aber wenn Du in 2 Jahren mal was änderst und plötzlich zuckt ein Servo alle 10 Minuten mal, dann viel Spaß beim Fehler suchen.
Nicht dass ich nicht auch schon mal so einen Bock geschossen hätte
Edit: typo korrigiert