Go Down

Topic: itoa - millis() (Read 757 times) previous topic - next topic

PaoloP

Esegui questo sketch e controlla i risultati dell speedtest.
Vedrai che a volte 1000 millisecondi vengono contatti come 999 o 1001, se non peggio.
--> http://playground.arduino.cc/Main/ShowInfo
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

uwefed


La variabile tempo di fatto è aggiornata ogni volta che si verifica la condizione millis()>=tempo+1000


Hai ragione. Non l'ho visto.

Non so dove é il problema dell'imprecisione.

Comunque contare ogni secondo i millisecondi non é la via giusta per migliorare la precisione.
È meglio che lavori tutto il tempo con i millis() e fai la conta alla rovescia principale con quelli. Per la visualizzazione calcoli il tempo rimanente dai milliseconi in secondi e minuti e lo visualizzi in minuti e secondi.

Ciao Uwe

ecrock


Hai ragione. Non l'ho visto.

Non so dove é il problema dell'imprecisione.

Comunque contare ogni secondo i millisecondi non é la via giusta per migliorare la precisione.
È meglio che lavori tutto il tempo con i millis() e fai la conta alla rovescia principale con quelli. Per la visualizzazione calcoli il tempo rimanente dai milliseconi in secondi e minuti e lo visualizzi in minuti e secondi.

Ciao Uwe


L'imprecisione di 1-2 millisecondi ogni 1000 non è assolutamente un problema per quello che devo realizzare, però con quell'overflow dato dall'itoa l'imprecisione era di circa 200 millisecondi ogni 1000!
Ora funziona tutto bene, con la precisione preventivabile. Proverò comunque anche la tua strada.

Grazie ancora

uwefed


Ovviamente il "problema" era la dimensione della stringa, grazie. Nonostante l'avessi pure scritto, non avevo considerato lo \0 finale. Ma la domanda vera è: perchè accelera? non sarebbe più logico pensare ad un rallentamento?

Risposta.

Avendo dimensionato l'array troppo piccolo il /0 (3o elemento array[2]) viene comunque memorizzato nella cella di memoria ma dietro alle celle di memoria dove viene memorizzato l' array. Su quella cella di memoria sará memorizzato un valore di un alta variabile che memorizzando il /0 nel Array sovvrascrivi col valore 0. Adesso dipendente dallo Sketch e dal compilatore dopo l'array c'é una precisa variabile ma non so dirti quale sia (non ho la conoscenza necessaria da poterlo dire, forse qualcun altro).

Ciao Uwe
 

Go Up