Frage zu micros()

Hallo liebe Community,

Ich habe eine Frage zur folgenden Funktion:

http://arduino.cc/de/Reference/Micros

Die micros() - Funktion macht laut der oben genannten Seite folgendes:

"Gibt die Anzahl an Mikrosekunden zurück, die vergangen sind seit dem das Arduino Board das aktuelle Programm ausführt."

Angenommen eine Schleife wird ausgeführt. Gibt die Funktion dann die Zeit wieder, seitdem die gesamte Schleife arbeitet oder nur wie lange der aktuelle Durchlauf bereits anhält?

Danke! LG Tim

micros() funktioniert wie millis().

Er gibt die Zeit der µs zurück, die zum Zeitpunkt des Aufrufes bereits seit dem Start des Arduinos verstrichen sind.

Wenn deine Schleife wie folgt aussieht
for(int i = 0; i <= 10; i++) Serial.println(micros())
dann würdest du für jeden Schleifendurchlauf die bereits verstrichenen µs angezeigt bekommen.

Ok dankeschön. Dann also mit 2x micros() einmal zu Beginn und einmal am Ende der Schleife und daraus die Differenz erhalte ich die Länge des aktuellen Durchlaufes. Ok, vielen Dank!

Zu Beginn der Schleife und am Ende der Schleife bringt nicht viel. Es würde aber reichen, wenn du vor und nach der Schleife vergleichst. Nachteil, die Serielle Ausgabe braucht vermutlich länger als deine komplette Schleife wenn sie nonBlocking geschrieben ist.

Achso, nein, ich brauche ja die Dauer eines Durchlaufes und die Dauer soll dann auch nicht ausgegeben sondern nur vom Arduino weiterverarbeitet werden, also kein Problem :)

Wie häufig wird die Schleife aufgerufen? Wenn nicht zu häufig,

dann kannste

unsigned long deltaMircos;
unsigned long lastMicros = micros();

for(int i = 0; i < 4; i++) {
// tue was
deltaMicros = micros() - lastMicros;
}

micros() zählt übrigens nur in 4er Schritten. Ein einzelner Befehl (wie das i++, wenn es nur ein byte wäre) kann bis zu 0,0625 µs schnell sein, auf einem 16 MHz Arduino. Da ist es oft besser, einen Test hundert oder tausend mal zu wiederholen, damit was verlässliches rauskommt. Und auch messen, wie lang die Testschleife braucht, wenn gar nichts gemacht wird, ausser micros() aufrufen ;)