INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Einsatz von delays
11.12.2015, 23:05
Beitrag #1
Einsatz von delays
Hallo,
nachdem hier im Forum der Einsatz von delays immer wieder verteufelt wird, möchte ich dieses Thema auch einmal aufgreifen und meine etwas differenzierte Meinung dazu äußern. Aus meiner Sicht kann der Einsatz von delays schon berechtigt und auch sinnvoll sein, wenn z.B.:

1.) Es aus Hardwaregründen erforderlich ist, z.B. auf Zustandsänderungen oder auf Einschwingvorgänge kurz zu warten. Diese delays spielen sich häufig im Bereich von einigen hundert Mikrosekunden bis wenigen Millisekunden ab und haben daher meist nur wenig Einfluss auf einen ungebremsten Programmablauf.

2.) Es Programme gibt, wo einfach zwischen zwei Ereignissen nichts zu tun ist und damit meine ich auch wirklich nichts. Warum sollte dieses Warten nicht mit einem delay realisiert werden. Beispiel: Messwertaufnahme und Übermittlung des Messwertes an ein anderes System in einem Zyklus von 5 Minuten. Was soll der Controller in der Zwischenzeit machen, außer Warten?

3.) Die Aussagen, dass während eines delays der Controller nichts mehr tun kann, ist so nicht ganz richtig. Er kann nämlich sehr wohl auf Interrupts reagieren. Man kann das System ganz bewusst in den delay-Zustand versetzt, um zum Beispiel in dieser Zeit Zählimpulse per Interrupt zu erfassen (z.B. für eine Drehzahlmessung). Würde der Controller während der Impulszählung mit anderen Dingen sehr beschäftigt sein, könnten so Zählimpulse verloren gehen und dadurch das Ergebnis verfälschen.

Aus meiner Sicht ist also der bewusste Einsatz von delays sehr wohl berechtigt und man sollte daher die Verwendung nicht grundsätzlich so negativ darstellen. Es ist aber sicher richtig, dass man - vor allem Neueinsteigern - auf die Risiken hinweist, die der unüberlegte Einsatz mit sich bringen kann.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.12.2015, 23:20
Beitrag #2
RE: Einsatz von delays
Da hast Du wahr
Smile

Binatone
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.12.2015, 23:29
Beitrag #3
RE: Einsatz von delays
Hallo Retian,

grundsätzlich stimme ich deiner Darstellung zu, allerdings möchte ich hier noch ein paar kleine Einwände bzw. Erweiterungen anbringen.

Zu Punkt 1.
Habe ich keine Anmerkungen.

Zu Punkt 2.
Hier wäre es wichtig, wenn der Sketch wächst, rechtzeitig delays durch millis-Funktionen zu ersetzen. Eine spätere Anpassung ist kompliziert.
Wenn man einmal die Anpassung verstanden hat, ist diese auch nicht so schwer.

Zu Punkt 3.
Während des delays hat der Controller tatsächlich nichts zu tun außer zu Warten. Erst durch den Interrupt wird er ja zum Arbeiten verdonnert. Dies ist allerdings eine Auslegungssache. Auch sehe ich das mit den Zählimpulsen nicht so kritisch, da diese ja in der Loop ablaufen und er erst nach dem Zählen in eine andere Funktion springen wird. Außer es erfolgt ein Interrupt. Auch dies ist wieder Sache des Codes, wie dieser erstellt wurde.

Zusätzlich möchte ich anmerken, dass viele Funktionen, die mit den "verpönten" delays aufgebaut sind, durch gute Libraries wie "Timer oder SimpleTimer" ersetzt werden können.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.12.2015, 00:29 (Dieser Beitrag wurde zuletzt bearbeitet: 12.12.2015 10:13 von Retian.)
Beitrag #4
RE: Einsatz von delays
Hallo hotsystems,
dass von Dir eine Reaktion kommen wird, damit habe ich fix gerechnet Smile

Zu Punkt 2: Mir ist es, wie gesagt, um eine differenziertere Betrachtungsweise von delays gegangen, bei zu erwartender "quasi"-paralleler Bearbeitung von mehreren Vorgängen setze ich auch millis-Funktionen ein oder nutze auch gerne die Metro-Lib.

Zu Punkt 3: Da versehe ich nicht, was Du meinst mit "Auch sehe ich das mit den Zählimpulsen nicht so kritisch, da diese ja in der Loop ablaufen und er erst nach dem Zählen in eine andere Funktion springen wird."
In meinem (realisierten) Beispiel werden, während der delay-Zeit von 1 Sekunde Impulse durch Interrupts erfasst. In der Interruptroutine passiert nichts anderes, als dass ein Zähler jeweils um 1 erhöht wird. Bei bis zu 2000 Impusle in dieser Sekunde ist der Controller (in meinem Fall ein Attiny45) schon ganz schön beschäftigt und hat nicht wirklich Zeit, was anderes zu tun. Das delay dient also dazu, dass 1. der Controller in dieser Zeit sonst nichts zu tun hat, außer auf die Interrupts zu warten und 2. dass damit eine ungefähre Messzeit definiert wird. Die genaue Messzeit wird aber mit der micros()-Funktion (durch Ermitteln der Zeitdifferenz zwischen dem Beginn des delays und dem Ende des delays) genauer ermittelt, da für die Drehzahlmessung nicht nur die Anzahl der gezählten Impulse, sondern eben auch die genaue Zeit in der die Impulse angefallen sind, erforderlich ist.

Aber wie gesagt, mir war wichtig zu sagen, dass es schon Fälle geben kann, wo delay seine Berechtigung hat und nicht grundsätzlich abgelehnt werden sollte.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.12.2015, 09:17
Beitrag #5
RE: Einsatz von delays
Und "Goto"..........
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.12.2015, 10:34
Beitrag #6
RE: Einsatz von delays
(12.12.2015 09:17)arduinofan schrieb:  Und "Goto"..........

Hallo Binatone,
Goto ... ist sicher ein ähnliches Thema in Bezug auf differenzierter Betrachtungsweise. Wenn man mit goto kreuz und quer durch ein Programm springt, ist nicht nur kein schöner Programmierstil, auch die Lesbarkeit und Nachvollziehbarkeit eines Programmes wird damit sehr erschwert. Dagegen kann ein gut plaziertes goto schon einmal ganz nützlich sein. Also auch hier gilt für mich: Vermeiden wenn möglich, aber einsetzen, wenn erforderlich.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.12.2015, 14:43
Beitrag #7
RE: Einsatz von delays
(12.12.2015 00:29)Retian schrieb:  Hallo hotsystems,
dass von Dir eine Reaktion kommen wird, damit habe ich fix gerechnet Smile
Ich hoffe, du siehst es positiv. Wink

Zitat:Zu Punkt 2: Mir ist es, wie gesagt, um eine differenziertere Betrachtungsweise von delays gegangen, bei zu erwartender "quasi"-paralleler Bearbeitung von mehreren Vorgängen setze ich auch millis-Funktionen ein oder nutze auch gerne die Metro-Lib.

Das ist genau so, wie ich es auch sehe.

Zitat:Zu Punkt 3: Da versehe ich nicht, was Du meinst mit "Auch sehe ich das mit den Zählimpulsen nicht so kritisch, da diese ja in der Loop ablaufen und er erst nach dem Zählen in eine andere Funktion springen wird."
In meinem (realisierten) Beispiel werden, während der delay-Zeit von 1 Sekunde Impulse durch Interrupts erfasst. In der Interruptroutine passiert nichts anderes, als dass ein Zähler jeweils um 1 erhöht wird. Bei bis zu 2000 Impusle in dieser Sekunde ist der Controller (in meinem Fall ein Attiny45) schon ganz schön beschäftigt und hat nicht wirklich Zeit, was anderes zu tun. Das delay dient also dazu, dass 1. der Controller in dieser Zeit sonst nichts zu tun hat, außer auf die Interrupts zu warten und 2. dass damit eine ungefähre Messzeit definiert wird. Die genaue Messzeit wird aber mit der micros()-Funktion (durch Ermitteln der Zeitdifferenz zwischen dem Beginn des delays und dem Ende des delays) genauer ermittelt, da für die Drehzahlmessung nicht nur die Anzahl der gezählten Impulse, sondern eben auch die genaue Zeit in der die Impulse angefallen sind, erforderlich ist.

Meine Erklärung ist da nicht sehr deutlich. In zeitkritischen Routinen, so wie du sie beschreibst, ist das absolut richtig.

In nicht so zeitkritischen Systemen (wie ich versucht habe zu erklären) reicht die Messung in der Loop. Allerdings eben nur, wenn zwischendurch nichts anderes anfällt.

Zitat:Aber wie gesagt, mir war wichtig zu sagen, dass es schon Fälle geben kann, wo delay seine Berechtigung hat und nicht grundsätzlich abgelehnt werden sollte.

Und damit trifft dein Beitrag genau den Punkt.

Dafür ein großes DANKE.

P.S.
Im "Setup" können weiterhin delays belassen werden, hier wird nur der Start des Controllers verzögert aber der normale Ablauf nicht behindert.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.12.2015, 14:55
Beitrag #8
RE: Einsatz von delays
(12.12.2015 14:43)hotsystems schrieb:  [quote='Retian' pid='25242' dateline='1449876594']
Hallo hotsystems,
dass von Dir eine Reaktion kommen wird, damit habe ich fix gerechnet Smile
Ich hoffe, du siehst es positiv. Wink

Hallo hotsystems,
Natürlich war das positiv gemeint, ansonsten hätte ich ja diesen Smiley beigefügt: Sad
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste