Go Down

Topic: Velocità del loop Mega 2560 (Read 9 times) previous topic - next topic

lesto

usa micros() al posto di millis() e lascia

if (!cont){ //vediamo quanto impiega a overfloodare!

se proprio non ti fidi equvale a: (quando overflodda la variabile torna ad essere 0)

if (cont == 0){ //vediamo quanto impiega a overfloodare!
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

qsecofr

Code: [Select]
unsigned int cont = 0;
unsigned long dif;
unsigned long tempoInizioMs;
void setup(){
Serial.begin(9600); //mi aspetto molti meno interrupt/s dalla seriale
tempoInizioMs = millis();
}

void loop(){
while(1){
  cont++;
 
  if (cont == 65535){ //vediamo quanto impiega a overfloodare!
    dif = millis();
    dif = dif -tempoInizioMs;
     Serial.println( dif);
     tempoInizioMs = millis();
     cont =0;
    };
  };
}


a me sto codicice da i numeri... mi stampa solo 0.... secondo me qua il compilatore me la sta mettendo sul didietro...
l'ho un po' modificato ancora il codice qua sopra... lo so è un casino: non si fanno le prove così cambiando sempre qualcosa ma non va accidenti: ho provato il logico e l'illogico...

lesto

#26
Jan 07, 2013, 06:23 pm Last Edit: Jan 07, 2013, 06:25 pm by lesto Reason: 1
vedi sopra, la unsigned int è solo di 65535, quindi o la trasformi in long oppure passiamo ad usare la micros()

edit:
Quote
sta mega non si muove...


uhm qualche altra mega di confronto? sarebbe un bel problema se le mega avesserouna pesante perdita di prestazioni da qualche parte
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

qsecofr

rispolverando il codice iniziale (più o meno)... noto 544ms... sta mega non si muove...
Code: [Select]
const unsigned int CNT_MAX = 65000;
long cnt=0;
unsigned long prevMillis = 0;
long dif = 0;

void setup() {
    Serial.begin(9600);
}


void loop() {
    cnt++;
    if (cnt > CNT_MAX)  {
       dif = millis() - prevMillis;
        Serial.println((int) dif);
        prevMillis = millis();
        cnt = 0;
    }
}

lesto

#24
Jan 07, 2013, 06:18 pm Last Edit: Jan 07, 2013, 06:22 pm by lesto Reason: 1
vero  :smiley-red: :smiley-red:

si può risolvere conteggiando il tempo lato pc, ed eliminando il tempo stimato per l'invio su seriale
secondi da sottrarre = (caratteri inviati * (1/baudrate) )

oppure

microsecondi da sottrarre = (caratteri inviati * (1000000/baudrate) )

Quote
con il while... mi stampa tutti 0...


uhmm che sia una ottimizzazione del compilatore? però mi pare un pò troppo aggressiva... oppure l'ovreflow avviene in meno di un milis() :) allora in quel caso prova con una micros() :)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Go Up