Ciclo infinito

gpb01:
.... che è una bella porcheria ! Una assert() NON verificata o un errore HW deve bloccare il programma

Si ma sono casi abbastanza particolari, e avevo detto "restando sull'uso canonico di Arduino".. :slight_smile:

@docdoc, sono casi particolari.
Però, sketch che lavora solo se un sensore c'e' e risponde (esempio in i2c un lettore rfid), nella setup() non risponde, l'unica è accendere magari un bel led rosso e bloccare tutto.

docdoc:
Si ma sono casi abbastanza particolari, e avevo detto "restando sull'uso canonico di Arduino".. :slight_smile:

Beh ... l'errore HW è abbasta "canonico" da prevedere ...
... qui sopra, Standardoil, ti ha fatto un classico esempio con la SD :slight_smile:

Guglielmo

Edit: Ho scritto assieme a Nid ... che ha dato un altro esempio ...

Si, certo, ma quello lo immagino come un "freno di emergenza", per progetti dove fare "qualsiasi cosa" in presenza di un certo fault potrebbe causare problemi gravi (una CNC che ti va a trapanare il tavolo o una mano :wink: ).
In condizioni "normali", con progetti senza questo tipo di criticità abbastanza rare, a mio avviso non serve ed (infatti non mi è mai capitato di doverlo fare ;)) ma se anche fosse, è una cosa che chi scrive il programma sa bene come fare perché non è certo un novellino che gestisce un progetto di quel tipo... :wink: Non pensare che siano tutti esperti come te :smiley:

...
Che non sia un novellino é facile, ma non escludibile. Non sono così rari, a mio avviso, i threed di domande tipo "voglio il razzo per la Luna, ho un cacciavite"(ovviamente la loro traduzione Arduiniaia)

Non sò se ve nè siete accorti ma, l'autore del topic è fuggito perchè siete malati mentalmente e lo avete spaventato.

Comunque sia questo è quello che tentavo di dire, prima della partenza dai il SETUP (le basi su cui cominciare), poi il VOID INVENTATO con una variabile per congelarlo come dice Silente, poi al momento giusto lo metto nel LOOP e nel caso modifico la variabile(di congelamento) oppure richiamo un' altra variabile, il tutto con degli IF ( o simili) e (millis)....per non bloccare il programma.

Io al momento sto seguendo questo percorso, faccio bene????? (chiedo consiglio).

Non so, io continuo a non capire bene il senso di tutti questi discorsi.

Posto che in Arduino un ciclo infinito "utile" c'è già (il loop()), e quindi va sfruttato quello (e com'è fatto, è fatto, tocca farselo andar bene), l'unica utilità di un altro ciclo infinito che vedo è quella di BLOCCARE il programma in caso di evento inatteso (tipo devo leggere dei tag RFID e non c'è il lettore). In questo caso, perché preoccuparsi dell'efficienza? Intanto non c'è niente da fare, solo rimanere fermi lì... Che ci metta un nanosecondo o due ore a fare il loop, cosa cambia?

E comunque io resto convinto che solo un compilatore idiota potrebbe generare codice diverso tra

for(;;)
  ;

e

while(true)
  ;

o anche

antani: goto antani;

Su arduino e in generare su un microcontrollore, i discorsi fatti sono sensati. Si ha bisogno di un unico ciclo infinito per la ripetizione del codice, e può servire un ciclo infinito che blocchi l'esecuzione, per cui che sia più efficiente o meno non ha nessuna importanza.

Mentre nella programmazione generale con più thread di esecuzione, potremmo avere la necessità di eseguire all'infinito "fino al termine del programma" una parte del codice, allora si considera anche la velocità di esecuzione. Esempio in un videogioco, ci sara un thread con un ciclo infinito che "leggerà" la pressione dei tasti e o i comandi di un joystick, per cui possono esistere più cicli infiniti quanti sono i thread.

torn24:
Esempio in un videogioco, ci sara un thread con un ciclo infinito che "leggerà" la pressione dei tasti e o i comandi di un joystick, per cui possono esistere più cicli infiniti quanti sono i thread.

Esatto. E qui su Arduino si chiama funzione "loop()"... :smiley: