Wie wird ein Sketch vom Arduino abgearbeitet

Hallo miteinander,

Nunja eigentlich steht schon alles im Titel.

Beim schreiben eines Codes für ein DIY-Projekt wundere ich mich allerdings immer wieder wie der Code vom Arduino abgearbeitet wird. Ich weiß, dass loop() immer ausgeführt wird aber zB. millis() auserhalb von loop() funktioniert trozdem obwohl es ja eigentlich nicht ausgeführt werden dürfte.

Ich habe einen Screenshot angehängt mit einem kurzen Skech um zu verdeutlichen was ich genau meine.
millis() ist hier in einer Funktion auserhalb von loop() und so wie ich das verstanden habe wird die Funktion nur dann aufgerufen wenn sie im loop() über die blabla()-Funktion durchlaufen wird. Der Serialmonitor allerdings sagt anderes. Laut ihm zählt millis() durchgehend hoch nicht nur dann wenn die Funktion blabla() aufgerufen wird.

blabla-skech.PNG

Ja, millis() beruht auf einer Variablen, welche dauernd in einer ISR hoch gezählt wird.

Gut erkannt!

Die Arduino Software konfiguriert Timer0 so er alle 64 Takte (4 µs) eins höher zählt und alle 1 ms überlauft (genau alle 1,024 ms was aber kompensiert wird) und dann per Interrupt eine Variable inkrementiert. millis() gibt diese einfach zurück. micros() verechnet sie zusätzlich noch mit dem aktuellen Zählerstand

Bitte gewöhn Dir an, sprechende Variablen und Funktionsnamen zu verwenden.

Statt "blabla" könntest Du "holeMillisSekunde" schreiben.
Statt "asdf" "millisSekunden"

Time sollte einen unsgned long Variable sein weil das Vorzeichen Probleme macht.

Der Sketch wird früher oder später eine Zahl auslassen da delay(1000) 1 Sekunde wartet aber auch der Rest des Sketches Zeit braucht. Ein loop() Zyklus braucht grob geschätzte 1005 mS.

Du solltest die Ausgabe der Zahl nicht über delay() sondern über millis() steuern.

Im Hintergrund eines Sketches können viele Dinge passieren. Die Interruptroutine welche micros() und Millis() updatet ist nur eine Sache. Auch Bibliotheken können Teile enthalten die im Hintergrund zwischen der Ausführung des Sketches passieren.

Grüße Uwe

Hey danke euch allen,für die schnellen Antworten.

Und ja isch weiß asdf und blabla sind nicht gerad die besten Bezeichnungen aber als ich mein Problem schildern wollte dachte ich mir ich schreib schnell einen Sketch um alles ein wenig klarer zu machen.

Danke nochmal!
Max

Anmerkungen zu deinem Sketch.

Wow.png