Pages: 1 [2]   Go Down
Author Topic: millis()-Glaubensfrage  (Read 927 times)
0 Members and 1 Guest are viewing this topic.
Germany S-H
Offline Offline
Faraday Member
**
Karma: 138
Posts: 2874
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Na wenn das alles ist.  smiley-kiss

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

Offline Offline
Faraday Member
**
Karma: 102
Posts: 3563
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3470
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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.
« Last Edit: October 27, 2013, 01:50:36 am by Udo Klein » Logged

Check out my experiments http://blog.blinkenlight.net

D-49565 Bramsche
Offline Offline
Sr. Member
****
Karma: 6
Posts: 477
Geht nich ? Gipp's nich !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Habt ihr euch ja nun genug wegen millis() um die Ohren gehauen.  smiley-grin
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.  smiley-cool
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
Logged

To young to die - never to old for rock'n roll

Cloppenburg
Offline Offline
Edison Member
*
Karma: 28
Posts: 1017
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Eure Sorgen will ich haben...  smiley-cool
Logged

Nicht Mensch, nicht Tier: Programmierer halt...

Pages: 1 [2]   Go Up
Jump to: