Go Down

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

qsecofr



Hai provato lo speed test? --> http://playground.arduino.cc/Main/ShowInfo

no non ho provato, a me interessa sapere quante volte mi esegue il loop

Code: [Select]
unsigned long preMillis=0;
unsigned long counter=0;

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

void loop (){

counter++;
  if(millis() - preMillis >= 1000)
 {  
      preMillis = millis();      
      Serial.println((String)counter);
      counter=0;
 }
}



però questo programma non è esattamente scevro di operazioni... incrementa un long chiama la millis (che chissà quante operazioni fa) , sottrae due long, compara... quanto impiega una funzione millis?
la seriale poi ... presumo venga gestita ad interrupt?

pablos

Bhe la seriale è l'unica istruzione che impegna il micro alla fine del secondo trascorso
no comment

pablos


La lentezza della digitalWrite è rinomata. La digitalWrite esegue diversi controlli, primo fra tutti vedere se stai lavorando su un pin PWM, nel caso disattiva il corrispondente segnale ecc... Alla fine tutta 'sta roba la paghi.



Certo che è rinomata, ma sono quei miseri 80.000 cicli a vuoto che mi lasciano perplesso, tu stesso in qualche post non ricordo quale, hai detto che vengono impegnate librerie che non vengono usate, vabbè era un appunto nulla di grave  :D :D

ciao
no comment

qsecofr


Bhe la seriale è l'unica istruzione che impegna il micro alla fine del secondo trascorso


si quella non mi preoccupa... però sta all'ascolto sulla seriale... questo mi preoccupa di più ma non tanto...
imho il problema è il millis... e vorrei (ma ora no posso) fare un esperimento... 80000?

Code: [Select]

setup
cont = 0
oldmillis = millis


loop

cont ++
if cont > 100000
   serial print millis()-oldmillis
   oldmillis = millis
   cont =0
endif



capito cosa vorrei fare? quanti millis impiega ad incrementare una variabile e testare la stessa 100000 volte?
vorrei quasi scommettere  che questo ciclo te lo fa in un 10-15 clock... 1 megahz... stasera provo.

tuxduino

Per curiosità ho fatto qualche esperimento:

Code: [Select]
unsigned int cnt = 0;
const unsigned int CNT_MAX = 65000;

unsigned long prevMillis = 0;


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


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



Tempo medio: 230 ms
65000 / 0,230 = 282608 chiamate di loop() al secondo


Modificando le prime due righe in:
Code: [Select]
unsigned long cnt = 0;
const unsigned long CNT_MAX = 65000;


Tempo medio: 278 ms
65000 / 0,278 = 233812 chiamate di loop() al secondo

Go Up