Arduino Multitasking

qui GitHub - chrismoos/avr-os: Multitasking OS for Arduino and AVR platforms dice che per compilare la versione 2560
devi eseguire il build con:

make DEVICE=arduino_mega2560

Forse è per questo che con la mega non ti funziona.

Non conoscevo avr-os, ora gli ho dato uno sguardo veloce ed è interessante.
Per chi volesse saperne di più di RTOS gli consiglio di partire dal visionare il file context.h, le
macro SAVE_CONTEXT e RESTORE_CONTEXT rappresentano il cuore del OS.

Comunque, una applicazione sul pc anche complessa richiede raramente uno o più thread supplementari,
stessa cosa vale per le applicazioni embedded, anzi ci si deve chiedere sempre; questa cosa la possa fare
senza creare un altro task?
La risposta deve essere quasi sempre si, altrimenti si finisce per avere 10 task che si mangiano le risorse
e il programma fa ben poco e lentamente.

Tuttavia è possibile che tu abbia proprio necessità di un RTOS, ma al momento mi sembra che tu non abbia
le competenze per usarlo nel modo corretto; Il rischio è quello di cacciarsi nei guai senza sapere come ci si è finiti e tanto meno si sa come uscirne.

Un RTOS ben dotato fornisce anche funzioni per accedere all'hardware come timer, i2c, eeprom ecc
svincolando il programmatore dalla conoscenza intima dell'hardware. Senza RTOS ti tocca invece studiare
il datasheet e scrivere codice accessorio non strettamente legato alla applicazione.

Con arduino style è pratica comune usare millis() o micros(), non sarà bello ma funziona, comunque è possibile
renderlo accettabile creando delle funzioni che operano su millis() e raramente ciò risulta insufficiente e in tal
caso si può cominciare a pensare ad un RTOS.

Ciao.