Go Down

Topic: Ciclo infinito (Read 3441 times) previous topic - next topic

Etemenanki

#30
May 18, 2018, 11:04 am Last Edit: May 18, 2018, 11:05 am by Etemenanki
... forse proprio per "aspettare" all'infinito (o quasi) un'evento ... ad esempio, se mi serve che uno sketch faccia un po di cose, e poi al verificarsi di una certa condizione "congeli" tutto fino al verificarsi di un'interrupt, o roba simile ...

Come dici tu, si fa anche con un while, ovvio ... magari con il for suggerito da Guglielmo la MCU e' piu "reattiva" oppure ci sono altri vantaggi, non so ... altri casi non me ne vengono in mente al momento (ma sono quasi sicuro che, anche se ben nascosti, ci saranno) ...

EDIT: ma poi un'interrupt sarebbe letto, con la MCU bloccata in quel for ?
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

gpb01

#31
May 18, 2018, 11:11 am Last Edit: May 18, 2018, 11:12 am by gpb01
Insomma, non vedo proprio la necessità di una cosa del genere.
... le tipiche applicazione del "for( ; ; ) ;" che mi vengono subito in mente sono:

1. Funzioni sotto il controllo di un RTOS  (SI, si può far girare un vero RTOS anche su Arduino, con alcuni limiti, ma si può) e ... in tal caso, quelli che si chiamano Task (che altro non sono che funzioni di tipo void) NON debbono mai terminare, è il RTOS che li gestisce.

2.  Senza scomodare un RTOS, in tutti quei casi in cui c'è un "Errore Fatale", esempio una assert() non soddisfatta o un controllo del programma per cui, da quel momento, è impossibile proseguire.

Sicuramente ci sono altri casi ...

Guglielmo
Search is Your friend ... or I am Your enemy !

gpb01

#32
May 18, 2018, 11:13 am Last Edit: May 18, 2018, 11:13 am by gpb01
EDIT: ma poi un'interrupt sarebbe letto, con la MCU bloccata in quel for ?
Ovviamnete SI, gli interrupt seguono una loro strada ... ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

Etemenanki

Ovviamnete SI, gli interrupt seguono una loro strada ... ;)

Guglielmo
Quelli "fisici" si, essendo hardware dovrebbero avere la precedenza su tutto ... pero' a quel punto mi viene un dubbio diverso ... un'interrupt salta alla propria ISR, la esegue, ma poi, suppongo, ritorna esattamente da dove e' partito ... se viene rilevato in un while, puo avere un senso perche' nella while posso controllare se nella ISR ho alzato una flag e magari uscirne con un break ... ma anche se la ISR viene eseguita partendo dal ciclo for vuoto, alla fine se ci rientro a che mi puo servire (a parte eseguire ovviamente quello che metto nella ISR), dato che poi dentro il for "vuoto" non ci posso controlare nulla ?

A meno che, ovviamente, non metto le istruzioni di controllo nelle graffe del for, per cui non e' piu "vuoto" ma solo un'altro loop dentro il loop() principale (da cui in quel caso presumo possa anche uscire, giusto ?)

So che sembrano domande banali, ma io a quel livello, sono ... :P
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

gpb01

#34
May 18, 2018, 11:54 am Last Edit: May 18, 2018, 11:54 am by gpb01
... a parte eseguire ovviamente quello che metto nella ISR ...
... beh ... esattamnete solo a quello, reagire a degli "eventi HW" in una ISR , fare li un qualche cosa e tornare a non fare nulla, anche se, per fare questo, conosco metodi molto meno dispendiosi in termini di "consumi" :D

Guglielmo
Search is Your friend ... or I am Your enemy !

Standardoil

Commenti infiniti su cicli infiniti
Il moto perpetuo
Ops il moto infinito....
Non presurrò più la buona fede di chi:
NON indenta o USA la classe string o NON esegue le ricerche
Troppe volte e' stato segnalato che è sbagliato, quindi se si comportano così NON sono in buona fede

Non bado a studenti, che copino altrove

docdoc

puo avere un senso perche' nella while posso controllare se nella ISR ho alzato una flag e magari uscirne con un break ...
Si vabbè, e allora a che serve dire che si vuole un ciclo infinito, visto che infinito non è perché esiste una condizione di uscita?

... beh ... esattamnete solo a quello, reagire a degli "eventi HW" in una ISR , fare li un qualche cosa e tornare a non fare nulla
Eh, ma scusa, allora non basta lasciare vuota la "loop()"? Boh, lasciando stare cose particolarissime come RTOS o errori fatali (qui ci può anche stare, anche se poi anceh qui basta un flag nella "loop()") e restando sull'uso "canonico" di Arduino, scusate ma continuo a non capire a che cosa serva. Anche solo discuterne...
Alex "docdoc"
- "Qualsiasi cosa, prima di rompersi, funzionava"

gpb01

#37
May 18, 2018, 12:19 pm Last Edit: May 18, 2018, 12:19 pm by gpb01
... errori fatali (qui ci può anche stare, anche se poi anceh qui basta un flag nella "loop()" ...
.... che è una bella porcheria ! Una assert() NON verificata o un errore HW deve bloccare il programma ed il modo più corretto ed universalmente usato, è quello illustrato. Poi ... fai come vuoi ... :D

Guglielmo
Search is Your friend ... or I am Your enemy !

Standardoil

#38
May 18, 2018, 12:21 pm Last Edit: May 18, 2018, 12:22 pm by Standardoil
Beh, ti dico come la ho usato io l'unica volta che lo ho fatto
Datalogger che scrive su SD, sd fragile a criccare il file system.
Tre volte che perdo i dati
Alla quarta volta ho:
Chiuso il file
Acceso un led
Piantato arduino in loop infinito
Cosi sono stato sicuro che non solo la sd era chiusa, ma NIENTE poteva inavvertitamente cominciare una scrittura
Non presurrò più la buona fede di chi:
NON indenta o USA la classe string o NON esegue le ricerche
Troppe volte e' stato segnalato che è sbagliato, quindi se si comportano così NON sono in buona fede

Non bado a studenti, che copino altrove

Standardoil

Quando ho sentito: "Bongiorno, sono NIENTE"
sono corso a staccare la SD, troppo tardi mannaggia
Non presurrò più la buona fede di chi:
NON indenta o USA la classe string o NON esegue le ricerche
Troppe volte e' stato segnalato che è sbagliato, quindi se si comportano così NON sono in buona fede

Non bado a studenti, che copino altrove

docdoc

.... 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".. :)
Alex "docdoc"
- "Qualsiasi cosa, prima di rompersi, funzionava"

nid69ita

@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.
my name is IGOR, not AIGOR

gpb01

#42
May 18, 2018, 02:08 pm Last Edit: May 18, 2018, 02:09 pm by gpb01
Si ma sono casi abbastanza particolari, e avevo detto "restando sull'uso canonico di Arduino".. :)
Beh ... l'errore HW è abbasta "canonico" da prevedere ...
... qui sopra, Standardoil, ti ha fatto un classico esempio con la SD :)

Guglielmo

Edit: Ho scritto assieme a Nid ... che ha dato un altro esempio ...
Search is Your friend ... or I am Your enemy !

docdoc

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 ;) ).
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... ;) Non pensare che siano tutti esperti come te :D



Alex "docdoc"
- "Qualsiasi cosa, prima di rompersi, funzionava"

Silente

...
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)
Dove va un numero va una variabile, una funzione e/o  un test.
Per ottenere devi spiegare

Strumenti/Formattazione automatica fino alla morte!
Cristianesimo:bibbia='C':K&R

Go Up