www.mikrocontroller.net

Forum: Compiler & IDEs tip für saubere prozessprogrammierung


Autor: flyingwolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: flyingwolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: flyingwolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Markus (Gast)
Datum:

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

Markus

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
:-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.