Im Buch "der pragmatische Programmierer" findest Du den Begriff "Prototyp" (hat nix mit Prototying in JS zu tun)
Meint:
- Baue für eine Aufgabenstellung einen funktionierenden Prototypen
- Schmeiß den Prototypen wech
- Baue es ordentlich

Mit etwas Phantasie praktisch übersetzt:
- Reiß nen Projekt auf
- Schreibe Deine Register für nen Timer in die Main und fummel es zurecht, bis es läuft
- Mach nen Modul mit ner Funktion, deren Parameter die möglichen Variablen (Zyklus/Timernummer, mit/ohne Interrupt/Pintoggle) der Aufgabenstellung beschreiben. Nimm den Prototypencode aus der main raus und passe ihn in der Funktion an, bis Du denkst, es läuft.
- Baue nen Header dazu
- Schreib in die main Deinen Test (Funktionsaufrufe über alle Timer mit unterschiedlichen Funktionen und Zykluszeiten) und teste, bis der Arzt kommt.


Dann hast Du ein Testprojekt, aus dem Du die Funktion als Modul/Header entnehmen kannst, dass sich aber auch noch weiter eigenständig pflegen/erweitern lässt.

Die Hauptproblematik dabei: Ansprüche steigen mit der Anzahl der Anwendungen, also mit der Zeit. Wer beim ersten Schuss zu weit daneben liegt, darf rückwirkend Änderungen kompilieren und neu testen oder er betreibt früher oder später Wildwuchs in der Versionitis.