mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik In Timerinterrupt 2 Funktionen abwechselnd aufrufen


Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, ich möchte bei jedem Timerinterrupt eine von zwei verschiedenen 
C-Funktionen abwechselnd aufrufen. Klar bin ich in der Lage das zu lösen 
aber wie macht man es am elegantesten und schnellsten ?

Vielleicht eine Array aus 2 Funktionszeigern, dessen Index man mit jedem 
Timeraufruf so behandelt:

index^=1;

?

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Vielleicht eine Array aus 2 Funktionszeigern...

ja, genau.

> index^=1;
ist überflüssig.
Man kann index einfach immer weiter zählen, und mit index&1 ins Feld
greifen, oder bei jedem Durchlauf index=!index setzen; das kommt auch
auf einen 0-1-Wechsel raus.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach ne if Abfrage, das ist am schnellsten und kleinsten.
Pointer lohnen sich nur bei sehr vielen Entscheidungen.

Und in Interrupts sind Funktionspointer besonders ungünstig, da der 
Compiler nicht mehr verfolgen kann, welche Register benötigt werden 
werden.
Der Handler muß dann sämtliche Scratchpadregister sichern.


Peter

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Mach ne if Abfrage, das ist am schnellsten und kleinsten.
>Pointer lohnen sich nur bei sehr vielen Entscheidungen.

Ist das nicht zu einfach ?

;-)

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde es im Moment so machen:
INT_Funktion() {
   static char index = 0;

   if ((index++)&1)
      Funktionsaufruf_1();
   else
      Funktionsaufruf_2();
}

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das erscheint mir auch das vernünftigste

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.