Go Down

Topic: [Projekt] Multitasking (Read 7188 times) previous topic - next topic

TomLA

Manchmal braucht es eben doch den berühmten Schlag aud den Hinterkopf ;-)
Und der hat anscheinend auch bleibende Schäden verursacht  :smiley-grin:  :smiley-grin:

Tommy56

Schön, wenn der leichte Schlag geholfen hat und danke für die Rückmeldung.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Demokrit

Hallo combie,

ich nutze deinen TaskMakro gerne und oft - speziell, weil er mich zwingt, vermehrt in "Tasks" zu denken, und damit Spaghetticode zu vermeiden. Bislang waren dies eher einfachere Aufgaben, wie 2 Motoren, ein Display plus Rotary Encoder.

Jetzt stecke ich in einem Projekt mit deutlich höherer Komplexität (ESP32 mit I2C Port Expander, 5 (synchronisierte) Achsen, eine I2C WiiConsole, I2C Display und diverse Sensoren). Hier wird, zumindest nach aktuellem Konzept, die Zahl der Tasks stark ansteigen. Meine Frage betrifft den Loop, in dem ich bislang die Tasks einfach sequenziell aufgeführt habe.

So benötige ich z.B. eine Init-Task, die 5 Home und Limit Positionen ermittelt, und einige andere Dinge initialisiert. Dies tut sie i.d.R. nur 1x. Danach brauche ich sie nicht mehr. Würde hier ein konditionaler Aufruf (z.B. if (init)) im Loop Sinn machen, oder schieße ich mir damit ins Bein? Soll heißen: Gewinne ich Zeit mit einem "if" im Loop gegenüber "taskWaitFor(initMarker)". Es würde helfen, eine einmal abgearbeitet Task gar nicht mehr zu "betreten". Wenn dies etwas bringt, so könnte ich auch die InitTask weiter granulieren und abstrahieren.

Ich hoffe, ich habe mich verständlich ausgedrückt,

Beste Grüße,
Thomas

combie

#63
Mar 08, 2020, 06:44 pm Last Edit: Mar 12, 2020, 12:44 pm by combie
Quote
Ich hoffe, ich habe mich verständlich ausgedrückt,
Durchaus!
Zumindest zum Teil.

Aber dennoch möchte ich an den Grundfesten der Annahme rütteln.

Auf dem ESP32 stehen dir 2 vollwertige Kerne und FreeRTOS zu Diensten.

Meine TaksMakros kannst du da(auf dem ESP32) auch einsetzen.
Aber viel Sinn macht das nicht unbedingt, da das "Bessere" schon da ist und nur genutzt werden will.



Quote
Gewinne ich Zeit mit einem "if" im Loop gegenüber "taskWaitFor(initMarker)"
Geringfügig.
Es spart einen Call und die goto oder switch Anweisung ein.

Hiermit kannst du Tasks dynamisch erzeugen und auch wieder verwerfen
Unsichtbar wird der Wahnsinn, wenn er genügend große Ausmaße angenommen hat.
(Berthold Brecht)

Demokrit

Ich gebe zu, mich noch nicht wirklich mit FreeRTOS beschäftigt zu haben. Oberflächlich gelesen hatte ich mal, dass da der Einsatz von delay() statthaft ist, und zu einem Taskwechsel führt. Bislang war mir auch wichtig, wahlfrei zwischen Nanos und ESP32 wechseln zu können. Andererseits bin ich von dem ESP32 so begeistert, dass ich vielleicht nie mehr einen Nano anfassen werde.

Danke für den Hinweis zum FreeRTOS. Ich werde mich einlesen.

Go Up