2012-04-26 21 views

Respuesta

14

Una manera directa es usar la función millis() o micros() en la biblioteca Arduino. Tendrás un resultado de grano más fino con micros().

Por ejemplo:

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) 

Lea detenidamente la documentación de micros(): hay alguna información acerca de la resolución de tiempo.

+0

no se olvide de sincronizar la función 'micros' antes para eliminar su tiempo de llamada del resultado, podría ser significativo. unsigned long m1 = micros(); unsigned long m2 = micros(); largo sin signo mt = m2 - m1; ... unsigned long delta = end - start - mt; –

+0

@UgoRobain Esto parece una buena idea al principio, pero es intrínsecamente defectuoso tratar de eliminar el error de una función de tiempo cronometrando el uso de sí mismo. – krb686

+1

¿Podría dar más detalles? No veo por qué llamar a 'micros' dos veces y restar los resultados no me daría el tiempo que toman los micros. si llama a esto antes de realizar el tiempo de su función, puede restar dos veces la duración de 'micros' y, por lo tanto, lograr un tiempo más preciso de myFunction. –

7

la forma menos intrusiva es establecer un pin de puerto alto antes de la llamada de función y poco después. Coloque un osciloscopio en el pin del puerto y mida el tiempo alto.

Esto también puede darle una buena idea cualitativa de la variabilidad del tiempo de ejecución activando en el borde ascendente y observando la trepidación en el borde descendente.

+0

Muchas gracias. Sí, utilicé un osciloscopio, pero para otros fines. El problema es que tengo que poder usar esa variable en mi programa. – Eugen

Cuestiones relacionadas