[pic] ciclo for

Oct 08, 2006 5 Replies

ciao!



ho un dubbio legato all'implementazione del ciclo for in linguaggio C per PIC se uso una variabile di tipo INT (8 bit) è possibile fare un ciclo for da



256 ripetizioni?

facendo: int i; for (i=0; i


codificalo cosi'

unsigned char i; /* garantisce valori tra 0 e 255 */ i=0; while(1) { /* fai tutto quello che devi */ i++; if(i==0) break; }

P.S. NON FARLO VEDERE SUL GRUPPO it.comp.lang.c

interessante, non ci avevo pensato! ora la testo perchè il motivo per cui mi serviva un ciclo unico e un INT8 era per ottenere codice compatto e velocità di esecuzione (gli int8 sono più veloci degli int16) poi faccio sapere

grazie!

-ice-

ecco i risultati:

- usando un unico ciclo for e una variabile int16 di controllo ottengo la prestazione peggiore (100%)

- usando il ciclo da te suggerito (while/break) si guadagna in velocità (126%) mantenendo il codice compatto

- usando un ciclo for a 254 passaggi, variabile di controllo int8 e aggiungendo a fine ciclo lo stesso codice contenuto nel ciclo si ha un ulteriore piccolo guadagno in termini di velocità (128%) ma il codice richiede di più in termini di spazio flash

per cui direi che la soluzione da te proposta è la migliore! grazie 1000!

-ice-

aspe''''

hai ancora due possibilita' da testare:

do { } while();

e quella col l'innominabile goto :-)

provale!!!!!

ed al limite prova anche le versioni con i a decrementare , sempre se compatibile col contenuto del ciclo, su alcune architetture ( quelle con l'istruzione di "decrementa e salta se non zero" dovrebbe essere la piu' performante

la provo

questa mi rifiuto! cmq una GOTO incondizionata mi pare richieda 2 cicli di clock per cui è cassata in partenza

nei pic ++ e -- si equivalgono e per gli int8 sono più veloci di +=1 e -=1

-ice-

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required