Forum: Compiler & IDEs tip für saubere prozessprogrammierung


von flyingwolf (Gast)


Lesenswert?

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

von Mike (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von flyingwolf (Gast)


Lesenswert?

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

von Mike (Gast)


Lesenswert?

"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.

von flyingwolf (Gast)


Lesenswert?

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.

von Markus (Gast)


Lesenswert?

Es gibt doch auch lokale Variablen, die ihren Wert von einem Aufruf zum
nächsten behalten. Einfach vor die Variablendeklaration static
schreiben.

Markus

von OldBug (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.