Zeiger auf Funktion

Gast #368207
Lesenswert?
• ▲
▼
Hallo,

Ich habe eine ISR in der ich eine andere Funktion aufrufen möchte. Da
sich die Funktion auch mal ändert zur laufzeit würde ich dies gerne als
Zeiger hinterlegen. Diesen Zeiger will ich mit hilfe ein Funktion
übergeben. Zweck ist es das man der ISR eine Funktion hinten dran hängt
(diese Funktion soll eine werte erhalten oder zurück geben). Das soll so
in etwa sein wie bei DOS, wo man sich in eine ISR mit "reinhängt". Die
Frage die sich stellt ist wie ich mit diesen Zeiger die Funktion
aufrufen kann, den Zeiger der Funktion bekommt man ja schnell raus.
Benutzten tut ich AVR-gcc und einen ATmega32. Viele Dank für eure hilf
oder denkanschupster.

MfG Dirk
#368209
Lesenswert?
• ▲
▼
Das ist eigetlich sehr simpel.
Empfehlenswert bei Funktionszeigern ist es immer
sich einen typedef für den Funktionstyp anzulegen:

typedef void Fnct(void);

Das sagt nichts anderes aus, als das Fnct eine
Function ist, die nichts kriegt und nichts
liefert.

Ein Funktionszeiger ist dann:

Fnct* MyFnct;

So einem Pointer kann man dann die Adresse einer
geeigneten Funktion zuweisen:

void foo()
{
}

int main()
{
  MyFnct = foo;
}

Die Funktion wird dann über den Pointer auf-
gerufen:
  (*MyFnct)();

Da allerdings die Syntax hier eindeutig ist, kann
man sich die explizite Dereferenzierung sparen
und ganz einfach schreiben:

  MyFnct();

Tja, das wars dann auch schon. Die Aufrufkette
aufbauen ist jetzt dein Bier. Ist aber recht
simpel: Jede Funktion ruft am Ende über einen
Pointer die nächste auf. Mit Ausnahme der
Letzten natürlich.
Gast #368210
Lesenswert?
• ▲
▼
Im Beispielcode von Atmel fuer den Butterfly gibt es ein ganz
brauchbares Beispiel fuer die Vorgehensweise. Allerdings keine
"Pointerkette" wie von K-H. Buchegger vorgeschlagen, nur "simples"
Array.

Original:
http://www.atmel.com/dyn/resources/prod_documents/AVR_Butterfly_application_rev06.zip


Portierung fuer avr-gcc auf:
http://www.siwawi.arubi.uni-kl.de/avr_projects/#bf_app

jeweils Quellcodedateien timer0.*

Martin Thomas
Gast #368213
Lesenswert?
• ▲
▼
hm ... aber in meinen büchern habe ich nix wirklich dazu gefunden, es
ist scheinbar eine art vorzugehen wie sie bei mikrocontroller üblich
ist, aber nicht auf den PC. Aber vielleicht habe ich auch nach den
falschen sachen gesucht, dann sieht man ja bekanntlich die eigentliche
lösung vor einem nicht mehr, auch wenn sie im buche steht ...
Gast #368214
Lesenswert?
• ▲
▼
Funktionszeiger sind nicht mikrocontrollerspezifisch, sondern werden
durchaus öfters verwendet, z.B. für Callback-Funktionen. Die sollten in
jedem halbwegs vernünftigen C-Buch beschrieben sein. Allerdings gibt es
viele Bücher, die nicht mal halbwegs vernünftig sind.

Antwort schreiben

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.

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.