Vorrei approfondire il discorso del mutitasking con arduino con degli esempi .
Ho provato a cercare su internet, ma ho trovato molto poco, oltre all'esempio Zuccala sul forum.
Qualcuno conosce e sa indicarmi qualche link o libro (possibilmente in italiano ...) ?
Il multitasking su Arduino Uno e simili non esiste. Puoi solo far eseguire tutto in successione, apparentemente allo stesso momento se l'esecuzione del loop è abbastanza veloce. Per questa ragione bisogna abituarsi a scrivere programmi che vengano eseguiti velocemente, che non contengano nulla di bloccante come delay o certi while, salvo che si sia ben coscienti di ciò che si fa e che, quindi, il blocco dell'esecuzione avvenga solo se e dove desiderato e senza ripercussioni sul corretto funzionamento.
Un while, per esempio, è accettabile all'avviamento del dispositivo, in cui se non viene rilevata una periferica il dispositivo stesso non può funzionare;
un delay di alcuni microsecondi o millisecondi è accettabile, per esempio, se bisogna inviare dati rispettando delle temporizzazioni;
un delay di alcuni secondi è accettabile solo se il programma deve fare solo una cosa, nient'altro, nè si prevede che debba fare altro in futuro (ma chi può dirlo con sicurezza?...); se sarà necessario fargli fare un'altra cosa, bisognerà togliere il delay e fare diversamente. Tanto vale, quindi, fare diversamente da subito: è solo questione di abitudine!
Come ti è stato detto, essendo Arduino una MCU single core, esso è in grado di eseguire una cosa alla volta, ma questo non significa che non si possa scrivere il codice facendo in modo che sembri che ne faccia più di una assieme ... in realtà ne fa sempre una per volta, poi ne fa un'altra, e così via, molto velocemente, dando l'impressione che più cose siano fatte allo stesso tempo.
Questa tecnica, ovvero di suddividere il tempo tra più compiti, è quella normalmente usata sia nelle più grosse CPU per far girare più programmi (dove è gestita dal sistena operativo), sia nelle piccole MCU dove però ... il sistema operativo non c'è e devi fare tutto tu.
Devi quindi studiarti come si usa la funzione millis(), prima QUI, poi QUI e QUI e QUI e tutti gli articoli che sono in QUESTA pagina ... vedrai che poi ti sarà tutto più chiaro
Guglielmo
si , lo avevo capito che non esiste il vero multitasking per arduino, ma non volevo usare i delay per interrogare i vari sensori in sequenza e reagire il più velocemente possibile.
Hai letto la mia risposta nel post di sopra (#3) ?
Guglielmo
Scusami, ma forse mi sono distratto e mi sfuggito il Tuo Post.
Ok ho visto che sono interessanti e li leggerò.
Grazie.
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.