Go Down

Topic: millis()-Glaubensfrage (Read 1 time) previous topic - next topic

jurs


Na wenn das alles ist.  :*


Fast alles, es wäre auch zu berücksichtigen, dass  letzter_zeitpunkt als "unsigned long" deklariert werden muß und keinesfalls nur als "long".

Serenifly

Da kommt Donald Knuths Aussage "We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil" wieder zum Tragen.

Übertriebene und vorauseilende Optimierung ist nicht immer gut, da sich dadurch auch wieder leicht Fehler einschleichen können oder der Code schlechter lesbar wird.

Udo Klein

#17
Oct 26, 2013, 09:29 pm Last Edit: Oct 27, 2013, 07:50 am by Udo Klein Reason: 1
Wenn es unbedingt mit millis() sein muß, dann würde ich das wenigstens wegkapseln. Ähnlich wie im Lighthouses Experiment (http://blog.blinkenlight.net/experiments/basic-effects/lighthouses/).

Code: [Select]

typedef void (*command)();

template <unsigned long wait_ms, command c>
void repeat() {
   static unsigned long start = millis();
   if (millis()-start >= wait_ms) {
       start += wait_ms;
       c();
   }
}

void task1() {
   Serial.println(F("1 second elapsed"));
}

void task2() {
   Serial.println(F("2 seconds elapsed"));
}

void task3() {
   Serial.println(F("3 seconds elapsed"));
}


void setup() {
   Serial.begin(115200);
}


void loop() {
   repeat<1000, task1>();
   repeat<2000, task2>();  
   repeat<3000, task3>();  
}


Dann ist wenigstens das Timergefrickel vom Rest sauber getrennt.
Check out my experiments http://blog.blinkenlight.net

TERWI

Habt ihr euch ja nun genug wegen millis() um die Ohren gehauen.  :D
Eher "pille-palle" - oder ? (bei Überlauf mal abgesehen - aber auch das ist meistens mit/in der [längeren] Loop automatisch kompensiert).
Leute ... das ist dann doch schon OK, wenn wenigstens kein delay verwendet wird.  8)
Wirklich kaum jemand hat es bei normalen Abfragen in der Loop so was von genau eilig - wer doch, muss eben auf Timer oder Interrupts zurückgreifen.

.... nu kommt jemand wegen micros() mit der gleichen Frage um die Ecke ?!
Die sind beteff der Genauigkeit eh schon mal 4 Ticks ungenau.

Der Ball ist wieder zur Duskussion im Feld zur weiteren Bespielerei.  :smiley-mr-green:
To young to die - never to old for rock'n roll

skorpi08

Eure Sorgen will ich haben...  8)
Nicht Mensch, nicht Tier: Programmierer halt...

Go Up