Rückkehr von ISR nach main

Gast #6033
Lesenswert?
• ▲
▼
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
Gast #6034
Lesenswert?
• ▲
▼
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
Gast #6036
Lesenswert?
• ▲
▼
@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
#6037
Lesenswert?
• ▲
▼
@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
Gast #6039
Lesenswert?
• ▲
▼
@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

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.