task vs. co-routine

Gast #3040926
Lesenswert?

Hallo,

ich arbeite mich gerade in freeRTOS ein und habe irgendwie ein 
Verständnisproblem zwischen "co-routinen" und "tasks":

http://www.freertos.org/croutine.html
http://www.freertos.org/a00015.html

Was soweit klar ist, ist, dass der Task immer eine höhere Priorität hat. 
Aber was soll da sonst noch anders sein? Beide brauchen einen stack und 
beide brauchen ihre Zeit für den context-switch.
Gast #3044661
Lesenswert?

Die Sache mit dem Stack leuchtet mir irgendwie immer noch nicht ein 
(sorry für meine Unwissenheit).

Wenn ein Task die co-routine unterbricht, müssen doch die Variablen der 
co-routine irgendwo in einem Stack abgelegt werden. Dann ist es aber 
(meiner Meinung nach) auch egal ob sich dieser Stack innerhalb oder 
außerhalb eines Tasks befindet. Der dafür benötigte Stack hätte dann 
trotzdem immer die gleiche Größe.
Gast #3045045
Lesenswert?

cooperative Tasks werden oft als Macros implementiert, welche dann
im Main sind, und zumindest bei GCC wird gerne ein computed goto 
zusammen
mit dem _LINE_ verwendet, um sowas zu implementieren.
So hat man keine Probleme wegen des Levels der Klammer.

So hat man ein Level, und alle Unterprogramme kommen zurück.
Generell gilt:
Ein Prozess darf in Unterprogrammen Yield bzw sleep usw machen,
die restlichen Prozesse, wenn sie ein Unterprogramm aufrufen muss das
Unterprogramm zurückkehren ohne ein Taskwechsel zu machen.
Beispiel für Unterprogramme welche Sleep machen sind z.B. 
Displaysteuerung
usw.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren