tip für saubere prozessprogrammierung

Gast #181719
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
Gast #181720
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.
#181721
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
Gast #181722
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
Gast #181723
"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.
Gast #181724
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.
Gast #181725
Es gibt doch auch lokale Variablen, die ihren Wert von einem Aufruf zum
nächsten behalten. Einfach vor die Variablendeklaration static
schreiben.

Markus
Gast #181726
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
:-)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.