Georg M. schrieb:
Meine Frage ist nun, ob man diesen Code irgendwie verbessern...
1 |
> uint8_t avar; // auxiliary variable
|
Das sollte keinesfalls eine globale Variable sein (und auch keine im Static Storage). Einfach eine lokale Variable in der entsprechenden Funktion machen / block machen (while Loop von main).
Gleeiches gile für cnt; diese Variable ist lokal in main.
1 |
> TCB0.CCMP = 0xFE4F; // timeout value
|
Magische Werte erschweren es den Code nachzuvollziehen (warum nicht 0xFE4E? etc.) und auch anzupassen, etwa auf eine andere Taktfrequenz oder Event-Rate. Oft lassen sich AVR Timerwerte berechnen gemäß
1 |
SFR = (uint32_t) F_CPU / PRESCALE / IRQs - 1;
|
wobei:
F_CPU = Taktrate (des Quatzes, R/C-Oszillators) in Hz
PRESCALE = Eingestellter Prescaler-Wert (Kommentare schweigen dazu)
IRQs = Anzahl Ereignisse pro Sekunde
Es wäre wünschenswert, dass die Kommentare genau und nachvollziehbar erklärt, wie man auf exakt diesen Wert kommt (oder eben eine Formel wie oben, die übrigens bereits vom Compiler ausgewertet wird.
Aber dem steht die 2-spaltige Formatierung entgegen, die einen dazu drängt, knappe und schlampige Kommentare zu schreiben statt hilfreicher. Kommentare sollten einem Wert genug sein, ihnen eine eigene Zeile zu gönnen, statt sie dem Ziel unterzuordnen, möglichst viele Zeilen ins Fenster zu quetschen.
Auch die anderen Kommentare sind mangelhaft, egal ob es sich "nur" um eine Übungsaufgabe handelt, um ein Tutrial, oder um produktiven Code.