Hallo erstmal... in meinem C-Programm mit ISR (Timer0 Overflow) möchte ich, daß die Rückkehr aus der ISR nicht zum ürsprünglichem Befehl(+1) springt sondern an den Programmstart (main). Ist das in C möglich? In ASM war alles soooooo einfach, da war ich Herrscher und Gebieter über jedes einzelne Bit. Irgendwie hab' ich das Gefühl, daß 'C' mich in meiner Autorität einschränkt. Gruß Norbert
Da gibt es so Funktionsaufrufe wie setjmp() und longjmp() mit denen man solche Schweinereien machen kann. Frag mich aber nun nicht wie das funktioniert, ich programmiere immer getreu nach der Bibel ;-) Gruss, Peter
Warum so kompliziert, wenn es auch einfach geht. Einfach eine Adresse in eine Funktion casten: #define CALL(addr) (((void(*)(void))(char *)addr)()) CALL(0x0000); // Reset = Sprung nach 0x0000 Peter
@Peter: Schweinerei ist OK! Hab' mir heut' Nacht die Bibel zu Hilfe genommen. Jetzt läufts bestens. @Peter Dannegger: Ich kann zwar Deinen Befehl nicht lesen geschweige verstehen, werde ihn mir aber in meine Sammlung aufnehmen. Norbert
@Norbert, dann sieh mal im C-Handbuch unter Cast-Operator nach. Mann kann einen Ausdruck in ein anderes Format casten (float, char usw.) oder in einen Pointer auf eine Funktion. D.h. im obigen Beispiel wird kein RJMP sondern ein RCALL 0x0000 gemacht. Ist aber in diesem Fall egal, da dann eh der Stack neu initialisiert wird. Funktionspointer braucht man z.B. auch, um einen Kommandointerpreter aufzubauen. Dazu erstellt man eine Tabelle mit den Kommadotexten (z.B. "LOAD", "STORE" usw.) und mit den Pointern auf die dann auszuführenden Funktionen. Z.B.: if( strcmp( rx_buff, comm_tab[i].name ) == 0 ) return comm_tab[i].func(); // execute command Peter
ähm, main ist doch auch eine funktion, oder? kann man die nicht direct aufrufen? - wohl eher nicht, wegen stack... (oder?)
@Peter Dannegger, das mit dem Casten bei Variablen war mir bekannt, weitergehende Anwendungen sind noch 'Böhmische Dörfer'. Nach 20 Jahren ASM und einem kleinen Intermezzo in Visual Basic hab' ich mir neulich 3 Fachbücher über ANSI-C geholt. Mit Christians Tut und diesem Forum wird's wohl auch was mit der C-Programmierung. Ich darf mir nur nicht zuviel aufeinmal zumuten. Norbert
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.