Hallo Leute ich habe eine Funktion, die auf 20 aufeinanderfolgede Interrupts reagieren soll. Dazu muss sie die Interrups mitzählen. Nun könnte ich eine lokale Variable nehmen und das Programm in einer Schleife laufen lassen, bis alle Interrups durch sind, was aber ca 2 sec. brauchen würde , die ich lieber sinnvoller nutzen möchte. alternativ könnte eine globale Variable die Zählung übernehmen, scheint mir aber sehr unelegant. Die Abarbeitung der kompletten Funktion in der Interruptroutine ist auch mist, weil zwischendurch div. anderer Interrups auftreten. Gibt es einen eleganteren Weg? fw
Was spricht dagegen in der ISR eine Variable zu inkrementieren. Hat die den Zielwert erreicht, setzt du ein Flag (weitere Variable) und setzt den Zähler zurück. In der Mainloop pollst du einfach auf das Flag. Wenn es gesetzt ist arbeitest du was auch immer ab und setzt das Flag zurück. Der restliche Code in der Mainloop wird so immer abgearbeitet.
In dem Fall ist eine globale Variable durchaus angebracht. Sparsam mit globalen Variablen sein, heißt ja nicht, daß sie verboten sind. Ich mache solche Ereigniszähler gerne als Count-down-Zähler. D.h. er wird auf 20 gesetzt und der Interrupt zählt runter, solange er nicht 0 ist. Und das main testet nur, ob er 0 ist. Peter
ich hab schon so furchtbar viel globale variable, weil ich es nicht hinbringe sie sauber zwischen den Funktionen zu übergeben, zumal die Funktionen auch immer gleich mehrer Variablen verändern. Ich hatte halt irgendwie gehofft welche einsparen zu können Trotzdem erst mal vielen Dank an Euch fw
"weil ich es nicht hinbringe sie sauber zwischen den Funktionen zu übergeben" Dann würde ich dort ansetzen, gib doch mal ein reduziertes Beispiel, wo man sieht, wo es bei dir hängt.
Das reduzieret Beispiel funktioniert hier wohl nicht, das Problem ist das ganze Programm. Trotzdem vielen Dank für das Angebot. Ich werde eine Globale spendieren. Wenn die Software fertig ist, werde ich sie ohnehin noch ein paar mal optimieren.
Es gibt doch auch lokale Variablen, die ihren Wert von einem Aufruf zum nächsten behalten. Einfach vor die Variablendeklaration static schreiben. Markus
Das ändert aber nichts daran, daß diese Variablen "statischen" Speicher belegen, was man ja mit Automatischen (Stack-) Variablen verhindern möchte. Aus diesem Grund sollte er ja offensichtlich nicht ganz so viele Varoablen verwenden, wenn ich das richtig interpretiere :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.