Problem mit Ausführungszeit bzw. micros() und delayMicroseconds()
Hallo,
ich habe folgenden Testcode für den Arduino Uno.
Code:
void setup() {
Serial.begin(115200);
while(!Serial){}
pinMode(3,INPUT);
}
void loop() {
int a = micros();
int c = digitalRead(3);
delayMicroseconds(1);
int b = micros();
b=(b-a)*4;
Serial.println(b);
delay(2000);
}
Ich will wissen, wieviel Zeit der Befehlsblock
Code:
int c = digitalRead(3);
delayMicroseconds(1);
in Anspruch nimmt. Ich erhalte eine Ausgabe, die sehr wechselhaft ist:
Code:
32
16
16
32
16
32
16
16
32
16
16
16
32
16
32
16
So weit ich das verstanden habe ist es doch auf dem UNO so, das micros() ein Vielfaches von 4 zurückgibt. Also multipliziere ich das Ergebnis mit 4. Dennoch braucht er einmal dann die doppelte Zeit zur Ausführung des Befehlsblocks? Ich denke:
- dass der Controller hier entweder zwischendurch dann was anderes macht, was Zeit benötigt
- der Mikrosekundenzähler eine relative Abweichung hat
Vielleicht weiß jemand besser darüber bescheid und kann mal eine Erläuterung dazu geben, was diese Schwankungen hervorruft?
Gruß, Moppi