Kein Multicore System. soll alles auf einem AVR laufen.
Hier mal ein Pseudo-Code Beispiel wie ich mir das Vorstelle:
Code:
void longrunning(void) {
...
}
void main(void) {
jobstack_put(&longrunnnig);
while(true) {
... //Do something else
jobstack_execute(); // this is the point where the jobstack functions are executed.
}
}
Also führt jobstack_execute den aktuellen Job aus. Ich Suche jetzt nach einer einfachen Möglichkeit, "Longrunning Jobs" auszuführen ohne die Main zulange zu blockieren. Normalerweise würde so eine Funktion in einem eigenen Thread laufen und der Scheduler würde mein Problem lösen.
Aber auf ein OS mit Threads will ich hier verzichten. Für meine Zwecke würde es reichen, wenn innerhalb des "Longrunning Jobs" Punkte angegeben werden, an denen die Ausführung pausiert werden darf.
Code:
void longrunning(void) {
... // do something
CUSTOM_BREAK;
... // do something more
}
}
Sobald CUSTOM_BREAK erreicht wird, soll jobstack_execute verlassen werden um noch einmal die Main-Schleife durch zu laufen. Wird jobstack_execute erneut aufgerufen, soll die Funktion longrunning direkt nach CUSTOM_BREAK wieder fortgesetzt werden.
Im Moment sind das nur Gedankenspielereien ob das Überhaupt möglich ist. Wie aufwendig die implementierung wäre und ob ein solches Konzept überhaupt einen mehrwert bringen würde.
- - - Aktualisiert - - -
@i_make_it:
Es geht hier auch nicht darum, andere Parameter zu übergeben, oder irgendetwas im Funktionsstack zu ändern. Ich will eine Funktionen während der ausführung unterbrechen und später "fertig ausführen".
Im Moment ist auch nichts im Main-Loop. Ich will eine "flexible" Middleware für ein Projekt und bin am Überlegen ob so etwas Überhaupt möglich ist und wenn ja ob es den Aufwand auch Wert wäre.
@witkatz:
Glaube nicht das ne State Machine das Problem löst. Man könnte die einzelnen Abschnitte (vor und nach dem CUSTOM_BREAK zwar in einzelne States packen und die nacheinander abarbeiten. Aber das geht etwas an meinem Ziel vorbei . Ich will Funktionen mit minimalen Aufwand (=ein Macro) aufteilen können.
Lesezeichen