ArduinoDue Scheduler

Lo scheduler inserito nell'Arduino Due è di tipo cooperativo, significa che il SO non esegue nessun controllo sulla durata di un task ed il passaggio da un task all'altro è lasciato al programmatore.

Lo scheduler della Due si basa su un delay modificato, che freeza un task e passa al successivo, in modo che durante l'attesa del task il SO esegua altri task.
Se un task non deve attendere, allora deve usare il meccanismo yield() che informa lo scheduler di controllare gli altri task.

Guarda l'esempio MultiBlink:

Nel loop c'è un delay. In realtà quel delay è modificato affinché sia controllato lo scheduler per vedere se ci sono task da eseguire. Loop2 è un task, al cui interno ci sono 2 delay per alternare un led. Se delay funzionasse alla vecchia maniera, il codice rimarrebbe bloccato. Invece, mentre pensi che sia eseguito un delay, lo scheduler va al task successivo, loop3.
Questo viene eseguito di getto e siccome non deve aspettare nulla, usa yield per rendere il controllo allo scheduler, a differenze di loop e loop2 che passano inconsciamente il controllo proprio col delay.