2012-04-26 25 views

risposta

14

Un modo semplice è utilizzare la funzione millis() o micros() nella libreria Arduino. Avrai un risultato di granulosità più fine con micros().

Per esempio:

unsigned long start = micros(); 
// Call to your function 
myFunction(); 
// Compute the time it took 
unsigned long end = micros(); 
unsigned long delta = end - start; 
Serial.println(delta) 

leggere attentamente la documentazione dei micros(): ci sono alcune informazioni sulla risoluzione temporale.

+0

non dimenticare di impostare l'ora della funzione 'micros' prima di rimuovere il suo tempo di chiamata dal risultato, potrebbe essere significativo. unsigned long m1 = micros(); longue non firmato lungo = micros(); mt non firmato lungo = m2 - m1; ... delta non firmato lungo = fine - inizio - mt; –

+0

@UgoRobain Questa sembra una buona idea all'inizio, ma è intrinsecamente imperfetta per cercare di rimuovere l'errore da una funzione di temporizzazione calcolando il tempo con se stesso. – krb686

+1

Potresti elaborare? Non vedo perché chiamare "micros" due volte e sottrarre i risultati non mi avrebbe dato il tempo impiegato dai micros. se lo chiami prima di eseguire il cronometraggio della tua funzione, puoi sottrarre due volte la durata del "micros" e conseguire quindi un tempismo più preciso di myFunction. –

7

il modo meno invadente è impostare un pin di porta alto prima della chiamata di funzione e basso in seguito. Metti un oscilloscopio sul perno della porta e misura il tempo massimo.

Ciò può anche darvi una buona idea qualitativa della variabilità del tempo di esecuzione innescando sul fronte di salita e osservando il jitter sul fronte di discesa.

+0

Grazie mille. Sì, ho usato un oscilloscopio, ma per altri scopi. Il problema è che devo essere in grado di usare quella variabile nel mio programma. – Eugen