..ich Gefahr laufe, dass der Prozessor zum Zeitpunkt "zeitpunkt" gerade nicht an dieser Zeile steht, sondern sich an irgendeiner anderen Stelle des Sketches befindet und er "mach was" nicht auslöst.
Sind meine Bedenken begründet und falls ja, wie kann ich dieses Problem umgehen/vermeiden?
{
zeitraum = 0xFFFFFFFF; // wird erst nach 50 Tagen erreicht
"mach was"
}
Nicht ganz.
Da Zeitpunkt sicher größer als 0 ist ist die Differenz zwischen millis() - zeitpunkt immer kleiner als 0xFFFFFFFF und wird deshalb nicht nach ca 50 Tagen erreicht sondern nie.
Grüße Uwe
Chris72622:
Und was mache ich, wenn ich
zeitpunkt
noch in anderen Zusammenhängen nutze, so dass ich ihn für dieses Vorhaben nicht verändern möchte?
Du nimmst natürlich für jeden logisch unterschiedlichen Zeitpunkt eine andere Variable, bitte sehr.
Und/Oder für jede getrennt gesetzte Funktion einen anderen "Einmal"-Merker...
Man sollte immer berücksichtigen, dass loop() so schnell sein kann, dass der gleiche millis()-Wert in mehreren Durchläufen nacheinander auftreten kann, und auch dass loop() so langsam sein kann, dass nicht jeder millis()-Wert getroffen wird.
Wenn es um exakte Wiederhol-Zyklen geht ( im Rahmen dessen, was millis() an Genauigkeit liefert ),
sollte man auch den nächsten Zeitpunkt nicht per
zeitpunkt = millis() + INTERVALL;
sondern mit
** **zeitpunkt = zeitpunkt + INTERVALL;** **
weitersetzen.
zeitpunkt += INTERVALL; // ist eine beliebte Kurz-Schreibweise hierfür
Da kann sich die aktuelle Ausführung ruhig um ein paar millis verzögern...