Pages: [1] 2   Go Down
Author Topic: millis()-Glaubensfrage  (Read 929 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
God Member
*****
Karma: 10
Posts: 587
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

ist es lediglich eine Glaubensfrage, was "man" verwenden sollte?  smiley-roll

Code:
if(millis()-intervall>letzter_zeitpunkt)

if(millis()>letzter_zeitpunkt+intervall)

Gruß Chris
Logged


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

Meiner Meinung nach ist das keine Glaubensfrage sondern eine Kenntnisfrage. Wenn Du Dich besser auskennst, dann ist die Antwort weder noch. Ich sag nur "msTimer2 und Freunde".
Logged

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

Germany S-H
Offline Offline
Faraday Member
**
Karma: 138
Posts: 2876
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ist es lediglich eine Glaubensfrage, was "man" verwenden sollte?  smiley-roll

Code:
if(millis()-intervall>letzter_zeitpunkt)

if(millis()>letzter_zeitpunkt+intervall)

Was sind denn das für Alternativen, wenn Du die Wahl zwischen Pest und Cholera anbietest?

Korrekt natürlich:
Code:
if(millis()-letzter_zeitpunkt>=intervall)
« Last Edit: October 25, 2013, 09:59:05 am by jurs » Logged

Offline Offline
God Member
*****
Karma: 10
Posts: 587
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich sag nur "msTimer2 und Freunde".

Läuft laut Spezifikationen nicht auf dem Mega, oder? Worin bestehen denn die großen Vorteile?

http://playground.arduino.cc/Main/MsTimer2

Gruß Chris
Logged


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

msTimer2 löst dann aus wenn der Interrupt kommt und nicht dann wen der Code drankommt.
Weiterhin trennt das Design dann sauberer zwischen der eigentlichen Arbeit und der Zeitbehandlung.

Nachteilig ist, daß man dazu zumindest rudimentär verstehen muß was es bedeutet nebenläufigen Code zu haben. Deshalb hatte ich ja gesagt, daß es eine Kenntnisfrage ist. Die msTimer2 auf einen anderen Controller zu portieren ist nicht schwierig.

Wenn Du die Vorteile nicht siehst, kannst Du auch die andere Lösung verwenden. Allerdings ist die Detailfrage auf welcher Seite des Vergleichs man rechnen soll von untergeordneter Bedeutung. Ich würde die Konstante auf eine Seite alleine sortieren. Im Zweifelsfall gibt das infinitesimal kompakteren und schnelleren Code. An dieser Stelle zu optimieren ist aber weniger wirkungsvoll als den Nummernschildhalter am Auto abzuschrauben um Sprit zu sparen.
Logged

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

Offline Offline
Edison Member
*
Karma: 38
Posts: 1152
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich glaube, das ist kein Unterschied, würde das aber eher so machen:

Code:
if(millis()>naechster_zeitpunkt){
  naechster_zeitpunkt = millis()+intervall;
  // sonstige Befehle
}
dann muß die Summe nur einmal berechnet werden.
Logged

Grüße
Gunther

Offline Offline
God Member
*****
Karma: 10
Posts: 587
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

An dieser Stelle zu optimieren ist aber weniger wirkungsvoll als den Nummernschildhalter am Auto abzuschrauben um Sprit zu sparen.

Alles klar- werd dann mal den Schraubendreher rausholen.  smiley-zipper

Gruß Chris
Logged


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

Wenn Du dabei bist kannst Du auch noch gleich die Fußmatten saugen. Das bringt nochmal zusätzliche Gewichtsersparnis smiley-wink
Logged

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

Germany S-H
Offline Offline
Faraday Member
**
Karma: 138
Posts: 2876
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich glaube, das ist kein Unterschied, würde das aber eher so machen:

Es macht beim Timen von Intervallen mit Hilfe der millis() Funktion keinen Unterschied bei Programmen, die weniger als 25 oder 50 Tage am Stück laufen, bevor sie resettet werden.

Wenn man Programme schreibt, die korrekte Intervalle auch bei Sketch-Laufzeiten von mehr als 50 Tagen am Stück einhalten sollen, und zwar bei allen Intervallen, auch über den Überlauf des Timers hinweg, der muß sich an bestimmte Standards halten.
Logged

Offline Offline
God Member
*****
Karma: 14
Posts: 541
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn Du dabei bist kannst Du auch noch gleich die Fußmatten saugen. Das bringt nochmal zusätzliche Gewichtsersparnis smiley-wink

Und Aschenbecher ausleeren  smiley-lol

Gruß,
Ralf
Logged

Es gibt 10 Arten von Menschen, die einen verstehen Binär, die anderen nicht...

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21243
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich glaube, das ist kein Unterschied, würde das aber eher so machen:

Code:
if(millis()>naechster_zeitpunkt){
  naechster_zeitpunkt = millis()+intervall;
  // sonstige Befehle
}
dann muß die Summe nur einmal berechnet werden.

Der Unterschid ist ob bei einem Überlauf der Intervall korrekt berechnet wird oder nicht.
Nehmen wir mal an daß der Überlauf bei 9 auftritt und nach 9  0 kommt.
Annahme millis() ist 7 und intervall ist 3 und naechster_zeitpunkt war am anfang 6
Daraus laut Deine Rechnung ergibt sich:
Code:
if(7>naechster_zeitpunkt){  // 7 ist > 6
  naechster_zeitpunkt = 7+3; = 0
  // sonstige Befehle
}
Nächster Durchlauf nach 1 Millisekunde:
Code:
if(7>0){   / bedingung ist wahr obwohl nur 1 Milliskunde vergangen ist und nicht 3 wie intervall.
  naechster_zeitpunkt = 7+3; = 0
  // sonstige Befehle
}

Der Überlauf wird falsch gehandhabt.
Grüße Uwe
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21243
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn Du dabei bist kannst Du auch noch gleich die Fußmatten saugen. Das bringt nochmal zusätzliche Gewichtsersparnis smiley-wink

Und Aschenbecher ausleeren  smiley-lol

Gruß,
Ralf
Dann muß mann auch doppelt fleißig die Insektenkadaver von der Windschutzscheibe kratzen (wegen Gewicht und Verschlechterung des cw-Wertes durch Unebenheit).  smiley-wink smiley-wink
Grüße Uwe
Logged

Offline Offline
God Member
*****
Karma: 10
Posts: 587
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn man Programme schreibt, die korrekte Intervalle auch bei Sketch-Laufzeiten von mehr als 50 Tagen am Stück einhalten sollen, und zwar bei allen Intervallen, auch über den Überlauf des Timers hinweg, der muß sich an bestimmte Standards halten.

Welche sind das?

Gruß Chris
Logged


Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21243
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn man Programme schreibt, die korrekte Intervalle auch bei Sketch-Laufzeiten von mehr als 50 Tagen am Stück einhalten sollen, und zwar bei allen Intervallen, auch über den Überlauf des Timers hinweg, der muß sich an bestimmte Standards halten.

Welche sind das?

Gruß Chris

Das hat ja jurs im Reply #2 schon beschrieben:
Quote
Korrekt natürlich:
Code:
if(millis()-letzter_zeitpunkt>=intervall)

Grüße Uwe
Logged

Offline Offline
God Member
*****
Karma: 10
Posts: 587
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Na wenn das alles ist.  smiley-kiss

Gruß Chris
Logged


Pages: [1] 2   Go Up
Jump to: