-
-
Erfahrener Benutzer
Robotik Visionär
Das Sei / CLI in der einen ISR kann man tatsächlich so machen. Es dauert hier doch relativ lange bis der Interupt ein zweites mal auftritt. Generell sollte man damit aber vorsichtig sein, denn verschachtelte Interrupts sind Fehleranfällig, und man sollte es nur tun, wenn man genau weiss was man tut und es auch nötig ist. Lohnen tut es sich hier eigentlich nicht, die ISR ist auch so sehr schnell fertig.
Die SEI / CLI Befehle in der While Schleife haben schon eine gewisse Berechtigung, wegen des Zugriffs auf die 16 Bit Variabel die in der ISR verändert wird. Das eine SEI sollte aber vor die Schleife, also nur das eine CLI-SEI paar in der Schleife. In diesem speziellen Fall ist es allerdings nicht nötig den Interrupt zu sperren - später werden (bis jetzt) ohnehin nur die unteren 8 Bits benutzt - das würde auch ohne das sperren des Interrupts gehen.
Es fehlt noch einige Male ein Volatile bei der Variablen deklaration - so wird der Compiler vermutlich etwas zu viel optimieren, weil er nicht weiss das da Werte in einer ISR verändert werden.
p.s.: Noch 2 Tipps:
1) ähnlich wie beim AD- kann man auch auf die ICP Register als 16 Bit Wert zugreifen. Man kann also gleich Time = ICP1 schreiben.
2) lokale Variabeln (hier HB und LB) für die ISR sollte man auch wirklich als soche deklarieren und keine globalen Variablen nutzen. Der Compiler kann dann besser optimieren, und außerhalb der ISR sind die Variabeln ohnehin nicht zu gebrauchen. Mit globalen Variabeln sollte man ohnehin sparsam sein.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen