Go Down

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

torn24

in effetti "a mano" si farebbe con un goto-jmp, ma credo che se oggi ancora si programma in assembly
"in casi estremi", sia proprio perché i compilatori non riescono ad "eguagliare"  un ottimo programmatore in assembly.

Ma per tutti quelli che non sono ottimi programmatori "come il sottoscritto" il compilatore fa meglio  :)  ;D

gpb01

#16
May 17, 2018, 09:08 am Last Edit: May 17, 2018, 09:09 am by gpb01
Io francamente voglio sperare che un compilatore furbo generi lo stesso identico codice in entrambi i casi, ovvero una jump incondizionata all'inizio del blocco...
Come ho detto, dipende dal contesto e dal compilatore ...
... su Arduino UNO (architettura AVR), il compilatore avr-gcc, genera esattamente la stessa cosa, ovvero:

Code: [Select]
ff cf       rjmp .-2
... ma è buona cosa sapere che NON sempre è così e quindi sapere quale è la strada che può essere la più ottimizzata.

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

Etemenanki

... i parametri nel 'for' sono tutti opzionali ...
Uhm ... "tutti" ? ... allora si, ha un po di senso ... altrimenti non me la spiegavo ... (a discutere con te si impara sempre qualcosa ... dovro' rompertele piu spesso ... scherzo ;))
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

nid69ita

Assolutamente si, i "parametri" del for sono tutti opzionali. 
Però NON chiamateli "parametri". I parametri si passano alle funzioni.  ;)
my name is IGOR, not AIGOR

Puso

off topic

Prima di arduino mi ero interessato alla programmazione picmirco "che attualmente ho abbandonato :)"
Nella programmazione dei vari microcontrollori non esiste una funzione loop() come in arduino, quindi si usa un loop infinito, while(1), che ha lo stesso scopo della funzione loop() in arduino, cioè ripetere in continuazione il codice.

Dopo questa premessa che non era rivolta agli esperti, ma soltanto a chi si è cimentato solo con arduino :)
Vorrei far notare che forse la differenza tra for( ; ; ) e while(1) è veramente minima, perché viene usato normalmente il secondo, quindi penso che la differenza in tempi di esecuzione sia veramente trascurabile.
dopo la premessa mi permetto di dire la mia,siccome a barte il basic del commodore16 che avevo da piccolo  le mi conoscenze sono solo su arduino (da meno di un anno...faccio un anno ad agosto.... ;D  ;D  8)  8)  8) ...)

Io al momento faccio una  void FUNZIONE(), con alla fine una variabile booleana che diventa false.

Quindi nel Setup dichiaro che la booleana è true.

Nel Loop metto  SE la booleana è true esegui la FUNZIONE( che alla fine si porta la booleana a false) ....quindi il Loop si blocca.

Scusami ma non sono bravo a spiegare. :smiley-cry:  :smiley-cry: 

Silente

Forse ho capito.
metti tutto il vero testo della loop{} in una if (variabile)
Quando devi bloccare metti la variabile a false. Di conseguenza la loop() continuerà a girare, senza mai entrare nell'if{} che contiene la "vera" loop, di conseguenza la variabile non tornerà mai a true... ciclo infinito
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

nid69ita

#21
May 18, 2018, 08:47 am Last Edit: May 18, 2018, 08:48 am by nid69ita
Per gli amanti del goto     ;D
Code: [Select]
...
infinito: goto infinito;
...

 
my name is IGOR, not AIGOR

torn24

#22
May 18, 2018, 09:01 am Last Edit: May 18, 2018, 09:04 am by torn24
@Puso, il tuo è un caso, un esigenza molto particolare, se ad esempio devi eseguire una funzione una sola volta a inizio programma, puoi richiamarla direttamente nel setup(). Bei tempi quelli del basic commodore, fortunato tu che lo avevi, io ero poveretto e non potevo permettermelo :) ho imparato il basic commodore in seguito quando ero grandicello :)


Off topic

In informatica oggi crea orrore pensare di usare un goto, la programmazione strutturata è uno standard non discutibile :)
Ma vorrei fare notare, che ad esempio in molti cnc professionali, il salto incondizionato, il goto, è ancora ampiamente usato, e a me è stato molto utile averlo usato nel basic, perché oggi sono poche le persone che ti possono spiegare come usare il goto per risolvere alcuni problemi :) ;)

gpb01

#23
May 18, 2018, 09:27 am Last Edit: May 18, 2018, 09:28 am by gpb01
Ma vorrei fare notare, che ad esempio in molti cnc professionali, il salto incondizionato, il goto, è ancora ampiamente usato, e a me è stato molto utile averlo usato nel basic ...
... è ampiamente usato in tutti quei linguaggi dove non sono presenti istruzioni/strutture come ci sono in C/C++, ed altri linguaggi, (es. while, for, do, switch, chiamate a funzioni, ecc. ecc.), oppure ... è ampiamente usato perché chi scrive i programmi è una "capra" :D :D :D

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

torn24

Be i linguaggi sono limitati, esempio Fanuc ha  il salto condizionato, il salto incodizionato, e il while, però non ha subroutine, non ha il concetto di blocco di codice, non ha neanche il gosub return, e quindi si deve fare molto uso del goto, esempio ha il while, ma se serve un do while, allora bisogna crearlo con il goto come si faceva col basic.
Di certo, a parte i tecnici specializzati, non è che chi fa questi programmi sia un eccellente programmatore, ma però si risolvono tanti problemi, non capre ma agnellini molto carini :)

Standardoil

Per gli amanti del goto     ;D
Code: [Select]
...
infinito: goto infinito;
...

 

per gli amanti del "gotoico"
versione "goto" del gotico
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

Etemenanki

"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

Standardoil

Meglio
10 GOTO 1

Che lascia anche qualche dubbio al lettore, impedisce RENUM e funziona anche se per sbaglio scrivo qualcosa in mezzo
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

gpb01

#28
May 18, 2018, 10:23 am Last Edit: May 18, 2018, 10:24 am by gpb01
Sempre i soliti a fare OT/Spam vero ? ? ?  :smiley-evil: :smiley-evil: :smiley-evil:

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

docdoc

Ho letto tutto questo interessantissimo thread, ma a me la domanda nasce spontanea: "su Arduino, a che minchia serve un loop infinito?"
Ok per i discorsi "accademici" ma comunque interesasnti sulle ottimizzazioni per risparmiare un paio di byte, ma se già c'è la loop() che è di fatto un loop infinito, a che serve? Tra l'altro in questo modo non funziona nulla a parte gli interrupt (nei quali in genere non si fa molto, si setta solo una variabile volatile e torna)...

Se proprio si vuole farlo, magari si pensava al loop per "aspettare" un certo valore, basta mettere nella while() tale condizione, o in una "if() break;" interna.

Insomma, non vedo proprio la necessità di una cosa del genere.


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

Go Up