Durchlaufzeit- Verständnisfrage bzgl. Auslastung

Hallo Community!

Hallo,
Ich bin relativ neu in der Arduinowelt und möchte einmal eine Frage zur Durchlaufzeit eines µc bzw. eines Arduinos stellen.
Mir ist der Unterschied zwischen delay() und der Verwendung von millis() bekannt, jedoch habe ich hier noch eine Verständnisfrage?
Bei einem sehr simplen Programm (z.B. Blink), wo eine genaue zeitliche Abfrage eigentlich relativ nebensächlich ist, schadet es hier dem µC nicht wenn dieser immer wieder ohne Pause, 24/7, ununterbrochen die loop durchläuft?
Oder würde hier die Wartezeit des delays nicht eigentlich den Prozessor schonen oder sogar den Verbrauch senken oder die Lebenszeit des µC erhöhen?
Ich hoffe es ist nicht eine allzu dumme Frage ... würde mich aber wirklich sehr interessieren, da ich nicht wirklich etwas zu diesem Thema finden konnte.
Danke :slight_smile:

johanna_82:
Oder würde hier die Wartezeit des delays nicht eigentlich den Prozessor schonen oder sogar den Verbrauch senken oder die Lebenszeit des µC erhöhen?

Nein.
In der Zeit laufen alle Komponenten mit und die CPU macht nur das rechnen um die Zeit totzuschlagen (vereinfacht gesagt)

Es gibt Möglichkeiten einen AVR in unterschiedliche Schlafmodi zu schicken - die dann auch unterschiedliche Einsparungen ermöglichen.

Leseempfehlung ohne Wertung und ohne das ich was davon habe wäre evtl:

Yep, delay() hilft nicht beim Sparen.

Hier ist das was zum 'Zeit totschlagen' getan wird (findet sich tief drinnen in der Arduino-Installation) - der Sourcecode von delay():

void delay(unsigned long ms)
{
  uint32_t start = micros();

  while (ms > 0) {
    yield();
    while ( ms > 0 && (micros() - start) >= 1000) {
      ms--;
      start += 1000;
    }
  }
}

Außer Spesen nix gewesen, es wird alle 1000 Mikrosekunden ein Zähler solange runter gezählt bis die Bedingung nicht mehr zutrifft. micros() liest im Wesentlichen den Stand eines durchlaufenden Timers aus und yield() ist eine leere Funktion (jedenfalls solange niemand sie anders definiert).

Im Normalbetrieb arbeitet die CPU im Controller den Code ab. Delay() ist dabei auch nur normaler Code. Darum ist da kein Unterschied.
Der Controller ist auf Dauerbetrieb ausgelegt. Es ist kein Problem den immer eingeschaltet zu lassen.

Es gibt Sparmodi, bei denen Teile oder der ganze Controller ausgeschaltet wird. Das dient aber nicht der Haltbarkeit sondern dem Stromsparen. So kann man bei Batteriebetrieb lange Funktionsdauer garantieren. Wir reden da von Jahre mit einer Batterie.

Anders ist es mit dem Beschreiben des nichtflüchtigen Speichers im Controller. Diese haben eine endliche Schreibzyklenanzahl.

Write/erase cycles: 10,000 flash/100,000 EEPRO

Grüße Uwe

Danke vielmals für eure tollen Antworten …. Jetzt ist ein bisschen Licht ins Dunkle gekommen. :smiley:
Ich dachte eigentlich, dass delay() wirklich den Prozessor quasi anhält. Das mit der while-Schleife ist sehr interessant, weil somit klar wird, dass der Prozessor auch hinter den Kulissen weiter arbeitet.
Es ist so auch ersichtlich, dass der Prozessor in der Schleife gefangen ist und nichts anderes in der Zwischenzeit abarbeiten kann.

Danke nochmal, das hat mich wirklich schon länger beschäftigt.

LG Johanna

bitte

johanna_82:
Danke

Ich schliesse mich unserem Mod uneingeschränkt an...

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.