Dazu muß man die Notation "long nextMinWakeUp = (nextWakeUpSRV < nextWakeUpLED) ? nextWakeUpSRV : nextWakeUpLED;" kennen.
http://forum.arduino.cc/index.php?topic=205334.0
Das entspricht also:
IF nextWakeUpSRV < nextWakeUpLED
THEN nextMinWakeUp = nextWakeUpSRV
ELSE nextMinWakeUp = nextWakeUpLED
Damit wird dann schlußendlich das "delay(nextMinWakeUp - currentTime)" mit einem Zeitwert gefüttert.
Lässt man es weg läuft "void loop();" einfach schneller durch.
Kann man weglassen kann man aber auch behalten wenn die CPU zu schnell ist.
Da das ganze ein kooperatives Multitasking ist, wird mit nextWakeUpSRV und nextWakeUpLED von den einzelnen Tasks mitgeteilt, wie lange es dauert bis sie wieder auf der Zeitscheibe dran sind.
Da bei Batteriebetrieb ein Delay() schon mal etwas Energie spart, ist is dort sinnvoll.
Denn dann wartet die CPU immer bis der Task mit der kleineren Restwartezeit drangenommern werden will.
Springt dann beide Tasks an und bekommt die aktualisierte Restwartezeit zurück.
Werden es dann mal mehr als zwei Tasks, wird dieser Codeteil natürlich umfangreicher oder man lässt ihn halt weg.
Lesezeichen