[Projekt] Multitasking

Ich vermute außerdem, daß jede Task in genau 1 Funktion liegen muß, in der mark und der switch definiert ist.

Eine Task befindet sich in einer Funktion
Eingerahmt von taskBegin() und taskEnd()
Nur der Speicherverbrauch setzt der Anzahl Funktionen/Tasks Grenzen.
Und, keine Datei, welche eine (oder mehrere) Task beinhaltet, darf mehr als 32kZeilen haben.
(könnte man mit unsigned int auf 64kZeilen erhöhen.)

Aufrufe der Makros in anderen Funktionen dürften nicht compilieren.

Wenn in der Funktion kein taskBegin() und taskEnd() in der richtigen Reihenfolge steckt, dann machen die TaskKontroll Dinger keinen Sinn, und werden Errors werfen.

Hast Du die Makros schon mal ausprobiert?

Natürlich!
:wink: Du auch? :wink:

Was soll das do - while(0) in taskSwitch?

Weil man sonst nicht den Einsprungspunkt für den nächsten Durchlauf hin bekommt.
(zumindest ich nicht, bisher)
Dieser Einsprungspunkt ist für jeden Taskwechsel unabdingbar nötig.
Der Compiler optimiert die tote Schleife weg.
Sie dient also nur dazu Syntaxfehler zu vermeiden.

IMO sollte taskPause und taskWaitFor eher so aussehen:

Das wird nicht funktionieren.
Denn dann wird kein Wiedereintrittspunkt für die Prüfung generiert. Die Prüfung muss ja öfter wiederholt werden, da bietet sich eine Schleife an. Ein if würde ja nur einmal prüfen.

Wenn taskSwitch() mark=LINE setzt, und case LINE ans Ende der Zeile, wie soll dann der Rest von taskPause (vor taskSwitch) mehr als einmal durchlaufen werden?

Die Frage verstehe ich nicht.....
Eigentlich kann ich dazu nur sagen: Es funktioniert!

PS:
Und Danke für den Kommentar/Nachfrage!

Und ja!
Ich treibe da bösen Schindluder mit dem switch/case Konstrukt.
Sonst bekommt man keine Schleifen aufgebrochen, ohne jeder Task einen eigenen Stack zu spendieren. Und das, das kann z.B. RTOS viel besser als ich.

Die Funktion der ProtoThreads ist vielleicht noch am ehesten mit diesen TaskMacros zu vergleichen.