Alternative zum delay

Joa, da hab ich meine Erklärung. ^^

Gut. Thema erledigt denk ich. Danke an alle!

combie:
unsigned long
0xFFFFFFFF + 1 = 0

Korrekt!

Was zwingend dazu führt, dass die vorher mal gespeicherte Zeit größer, als die JetztZeit ist!

Jetzt kommt einer da her und rechnet: (kleineJetztZeit - großeGemerkteZeit)

Es findet bei der Subtraktion ein Unterlauf statt.
Dieser Unterlauf kompensiert den vorherigen Überlauf.

Was dazu führt, dass (kleineJetztZeit - großeGemerkteZeit) die korrekte Zeitdifferenz als Ergebnis hat.
Damit liefert Zeitdifferenz >= Intervall immer richtige Ergebnisse.
Über alle Überläufe und Unterläufe hinweg

Male es dir auf Papier auf.

Oder nutze den Link von Tommy56, Der Das auf Byte-Ebene nachgebaut hat.
Dort muß man keine 49,7 Tage warten, bis der Überlauf daher kommt.

MfG

mrzortrax:
Denn es erscheint mir aktuell als unlogisch und das befriedigt mich noch nicht. :stuck_out_tongue:

Wenn Du Dir mein Demoprogramm aus #14 angeschaut / ausprobiert hättest, könntest Du es schon verstanden haben.

Gruß Tommy

mrzortrax:
Was genau meinst du mit Ablaufsteuerung?

Finite state machine = Schrittkette = Endlicher Automat

Beim Programmieren hatte ich mich immer vor Endlosschleifen gefürchtet, beim Arduino wird sie als loop zum Mittel der Wahl. Das wollte mir anfänglich nicht in den Kopf, widersprach meiner Gewohnheit, Chaos war die Folge. Der Endliche Automat brachte mit Leichtigkeit Ordnung, stellte sich als Lösung vieler Aufgabenstellungen heraus.

Beim Programmieren hatte ich mich immer vor Endlosschleifen gefürchtet, beim Arduino wird sie als loop zum Mittel der Wahl. Das wollte mir anfänglich nicht in den Kopf, widersprach meiner Gewohnheit, Chaos war die Folge. Der Endliche Automat brachte mit Leichtigkeit Ordnung, stellte sich als Lösung vieler Aufgabenstellungen heraus.

Och!
So verschieden kann es sein!

Ja, endliche Automaten bauen, ist die beste Strategie für eine Unmenge an Problemen.
Unwidersprochen!

Ansonsten war ich beim Programmieren, vor meiner Arduino Zeit, auf Endlosschleifen angewiesen.
Jedes Hauptprogramm, jede Task, jeder Prozess bekam seine Endlosschleife.
Mit Arduino war ich dann ganz verwirrt, da das plötzlich falsch sein sollte.
Das wollte mir anfänglich nicht in den Kopf, widersprach meiner Gewohnheit, Chaos (im Kopf) war die Folge.
Das Mittel, damit umzugehen, mich dem Problem zu nähern, war erstmal INTERVAL.

Etliche Versuche den Verlust zu erwähnen, darüber zu sprechen, sind gnadenlos versandet, oder gar abgeschmettert worden. Keiner schien das gleiche "Problem" zu haben. Oder mein Anliegen überhaupt zu verstehen. Eine tiefe Verzweiflung begann sich auszubreiten.

Erst die Übernahme der ProtoThreads aus meiner alten C Zeit, dem darauf basierendem Bau meiner TaskMakros, und dem Bau der OPP CooperativeTask und mittlerweile immer fleißigerer Verwendung von FreeRTOS kamen dann die Endlosschleifen, wieder ins Spiel! In meine kleine Arduino Welt.
Das brachte eine neue/alte Leichtigkeit in die Ordnung und die Abläufe.
Jetzt bin ich wieder glücklich und zufrieden.

Es hat ein Ende mit dem steten ängstlichen/panischen Blick auf die "Blockadefreiheit"!
Jetzt wird, wie damals, in eine Schleife gepackt, was Thematisch in eine Schleife gehört.
For und While, gerne auch endlos.

Es wird wieder in Nebenläufigkeiten gedacht und auch so programmiert!

habe mir mal ein paar Worte von dir geliehen

combie:
Och!
So verschieden kann es sein!

Glücklicherweise, das macht das Leben spannend :slight_smile:

combie:
habe mir mal ein paar Worte von dir geliehen

Bitte gerne :slight_smile:

:grin: