Velocità del loop Mega 2560

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!

no no tranquillo che mi fido... tant'è che il primo test sul loop l'ho fatto con il !cont... solo che sai... quando non sai dove sbattere la testa le provi tutte... ed infatti con questa logica random ho provato a cambiare anche piattaforma: leonardo...

unsigned int cont = 0;
unsigned long dif;
int somma = 1;
unsigned long tempoInizioMs;
void setup(){
 Serial.begin(9600); //mi aspetto molti meno interrupt/s dalla seriale
 tempoInizioMs = micros();
}

void loop(){
 while(1){
  cont=cont +somma;


  
  if (!cont){ //vediamo quanto impiega a overfloodare!
    dif = micros();
    dif = dif -tempoInizioMs;
     Serial.println( dif);
     tempoInizioMs = micros();
     cont =0;
    };
  };
}

29070MICROsecondi... quindi 29.... leonardo ha 4 timer se non vado errato...
nota che ho cambiato il cont++.... ho tentato di imbrogliare il compilatore perchè con il cont++ lo stesso programma mi fa uscire 4microsecondi...

In conclusione imho la velocità del ciclo loop "semivuoto" è dettata dal numero di interrupt (...leggasi quindi timers) che l'arduino ha attaccato... questo perchè in se il loop è tradotto con poche istruzioni assembler abbastanza ottimizzate (...all'inizio dicevo 10-15 cicli di clock perchè penso che un incremento, un salto ed un test su long grossomodo quello impieghino) però il processore è ugualmente gravato dall'aggiornamento dei timers ed eventualmente di altri interrupt esterni.

la curiosità è che questo compilatore non smette mai di stupirmi... vedi ottimizzazione che lui si è fatto sul ciclo while(1) senza che nessuno gli dica nulla..

unsigned int cont = 0;
unsigned long dif;
int somma = 1;
unsigned long tempoInizioMs;
void setup(){
 Serial.begin(9600); //mi aspetto molti meno interrupt/s dalla seriale
 tempoInizioMs = micros();
}

void loop(){
// while(1){
  cont=cont +somma;


  
  if (!cont){ //vediamo quanto impiega a overfloodare!
    dif = micros();
    dif = dif -tempoInizioMs;
     Serial.println( dif);
     tempoInizioMs = micros();
     cont =0;
    };
 // };
}

completo... poi lascio e vado a mangiare.... 120.000 microsecondi il ciclo senza il while con il solo loop... e la differenza è veramente tanta... ma in teoria dovrebbe essere solo una chiamata ad una funzione quindi.... pochi cicli di clock... imho c'è qualcosa ancora sotto... da 29 a 120ms non vi sembra strano?