Gast
#2372459
Hallo, habe einen Atmega8 und werte über INT0 eine externen Interrupt aus. In der Interrupt-Routine zähle ich einen 16 Bit Zähler hoch (mit volatile deklariert), wenn eine aufsteigende Flanke auftritt. Im Hauptprogramm kopier ich mir dann den Wert des Zählers in eine lokale Variable und möchte damit dann im Hauptprogramm weiterarbeiten. (Das Kopiern der 16Bit Variable in die lokale Variable des main-Programms passiert in einer atomaren Operation). Nun möchte ich immer wenn sich der Wert der lokalen Varible ändert eine Aktion ausführen. Der Code für diese Aktion ist zu groß um dies in der Interrupt-Routine zu machen. Nun müsste ich ja im Hauptprogramm ständig vergleichen, ob sich der Wert der lokalen Variable geändert hat um dann meine Aktion auszulösen. Dadurch habe ich aber dann die Main-Schleife zu 100% mit dieser Aufgabe 'belastet'. Der Vorteil, den ich mir über die Interrupt-Routine ermöglicht habe (nur zu reagieren, wenn eine Flanke an INT0 anliegt und main somit zu entlasten) habe ich mir damit wieder kaputt gemacht. Wie kann ich so etwas nun elegant lösen? Möchte also eine komplexe Funktionalität ausführen, nur wenn an INT0 eine Flanke auftritt. In der INT-Routine kann ich den Code nicht packen, weil der zu komplex und zu groß ist. Im Hauptprogramm dann über while(1) ständig das ändern des Zählers prüfen würde aber die Interrupt-Routine überflüssig machen. Danke für Eure Hilfe!