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
Liste der Anhänge anzeigen (Anzahl: 1)
Warscheinlich laufen die meisten Einstellungen bei Arduino über die boards.txt. Ob der Bootlader da überhaupt beteiligt ist, weiß ich nicht.
Die Takteinstellungen im Menu der Arduino IDE, wie hier bei Teensy 3.2 wählen auch nur unterschiedliche Zeilen in der Boards.txt aus
Anhang 33656