2012-04-26 6 views

Antwort

14

Ein einfacher Weg ist die Verwendung der millis() oder micros() Funktion in der Arduino-Bibliothek. Sie erhalten ein feinkörnigeres Ergebnis mit micros().

Zum Beispiel:

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) 

Lesen Sie sorgfältig die Dokumentation von micros(): gibt es einige Informationen über die Zeitauflösung sind.

+0

Vergessen Sie nicht, die 'Mikros' Funktion vor dem Entfernen seiner Calltime aus dem Ergebnis, könnte es signifikant sein. unsigned long m1 = micros(); unsigned lang m2 = micros(); unsigned lang mt = m2 - m1; ... unsigned lange Delta = Ende - Start - mt; –

+0

@UgoRobain Dies scheint zunächst eine gute Idee zu sein, aber es ist inhärent fehlerhaft, den Fehler einer Timing-Funktion zu entfernen, indem man ihn selbst mit Timing testet. – krb686

+1

Könnten Sie das näher erläutern? Ich sehe nicht, warum 'Mikros' zweimal zu nennen und die Ergebnisse subtrahieren würde mir nicht die Zeit geben, die von Mikros genommen wird. Wenn Sie dies vor dem Timing Ihrer Funktion aufrufen, können Sie die Dauer der "Mikros" zwei Mal subtrahieren und erreichen so ein präziseres Timing von myFunction. –

7

Am wenigsten aufdringlich ist es, einen Port Pin vor dem Funktionsaufruf hoch und danach auf Low zu setzen. Setzen Sie ein Oszilloskop auf den Port-Pin und messen Sie die High-Time.

Dies kann Ihnen auch eine gute qualitative Vorstellung von der Variabilität der Ausführungszeit geben, indem Sie auf die steigende Flanke triggern und den Jitter an der fallenden Flanke beobachten.

+0

Vielen Dank. Ja, ich habe ein Oszilloskop benutzt, aber für andere Zwecke. Das Problem ist, dass ich diese Variable in meinem Programm verwenden kann. – Eugen

Verwandte Themen