Verlassen einer Funktion um später zurück zu springen.
Ist es möglich eine Funktion an einem vorher definierten Punkt zu verlassen um dann später die Ausführung nach diesem Punkt wieder fortzuführen?
Mein Problem ist folgendes: ich habe einen JobStack auf den ich Funktionen lege, damit diese nicht im aktuellen Kontext ausgeführt werden (z.B. um den Kontext aus einer ISR zu verschieben). Der JobStack wird dann im Main-Loop abgearbeitet. Um den Main-Loop nicht zu lange zu blockieren suche ich eine Möglichkeit, Punkte in der Funktion festlegen, an denen die Funktion verlassen wird.
Wird ein solcher Punkt erreicht, soll der JobStack die Kontrolle zurück an den Main-Loop geben. Nach dem der nächsten Iteration des Main-Loops soll der JobStack dann wieder an den vorher verlassenen Punkt springen und die Funktion fertig (oder bis zum nächsten "Break"-Point) ausführen.
Ist sowas (mit vertretbarem Aufwand) überhaupt möglich und wenn ja wie Sinnvoll?
MfG Iqon
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von
Iqon
ob man das ganze Switch-Case gedöns irgendwie Sinnvoll verstecken könnte.
Verstecken kann man in C fast alles. Ob es sinnvoll ist, ist eine andere Frage. Wäre zwar nicht meine Art, aber bitte schön, ein Q&D Vorschlag zum Verstecken von "Switch-Case-Gedöns":
Code:
#include "StateMachine.h"
void longrunning(void) {
STATEMACHINE_INIT
;/*...*/ // do something
step++;
STATEMACHINE_STEP(1)
;/*...*/ // do something more
step++;
STATEMACHINE_STEP(2)
; // do even more
if(error)
step = -1;
else
step = 0;
STATEMACHINE_STEP(-1)
; // do some error handling
step = 0;
STATEMACHINE_END
}
Nachtrag:
Ich hab die quick'n'dirty Macros etwas überarbeitet und mittlerweile gefällt mir die Lösung sogar :cool: