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
äh ... sehe gerade, die Funktion die aufgerufen werden soll, bekommt keine Parameter und keine Rückgabewert, da ist wohl das "k" verloren gegangen :-)
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.
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
Danke für eure hilfe, mal wieder was gelernt ... wenn man ein beispiel hat geht alles einfacher zu lernen :-) nochmal THX an Buchegger & Martin Thomas ...
Ob du`s glaubst oder nicht, aber Bücer zum Thema Grundlagen der C Programmierung` sind voll von Beispielen
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 ...
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.