Forum: Mikrocontroller und Digitale Elektronik AVR viele Stunden in while Schleife, Problem? WatchDog?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Gast (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich habe einen AVR der im Polling Betrieb den UART abfragt. Klappt auch 
ganz gut. Jetzt Frage ich mich wie lange der AVR wartet das ein Zeichen 
ankommt ohne das es Probleme gibt? Also würde der Controller auch artig 
eine Woche warten ohne das das Programm abstürzt? Greift dann irgendwann 
der Watchdog ein? Oder sollte man den Watchdog aktivieren falls das 
Programm doch mal abstürzt?

von Johannes M. (johnny-m)


Bewertung
0 lesenswert
nicht lesenswert
Der Watchdog greift logischerweise nur dann ein, wenn er aktiviert ist.

Wenn der µC ordentlich programmiert ist und eine stabile 
Spannungsversorgung sichergestellt ist, gibt es eigentlich keinen Grund, 
warum er nicht ein paar Jahre in einer Endlosschleife sinnlos Strom 
verheizen kann...

von Klaus F. (kfalser)


Bewertung
0 lesenswert
nicht lesenswert
Jeder Prozessor wartet brav in der Schleife, ob tage-, wochen- oder 
jahrelang.
Die Abnützungserscheinungen der Schleife sind minimal.

(Ist nur ein Scherz, dem Prozessor ist es egal welchen Programmteil er 
ausführt).

Den Watchdog brauchst Du nur, wenn es ganz,ganz wichtig ist, dass dein 
Prozessor wieder von selbst auf die Füße kommt und schützt eher vor 
Softwarefehlern.
Im "Normalfall" (der eigentlich nicht vorkommen sollte), genügt es wenn 
der Benutzer merkt, dass der Prozessor nicht mehr reagiert und das Gerät 
aus- und einschaltet (MS Windows-Prinzip).

Klaus

von Markus B. (Firma: Embedit Mikrocontrollertechnik) (_mb_)


Bewertung
0 lesenswert
nicht lesenswert
Warten tut der Controller so lange er Strom hat und nicht kaputt geht. 
So lange der Watchdog ausgeschaltet ist unternimmt der auch nichts.

Wenn du den Watchdog aktivierst resettet er den Controller alle paar ms 
oder maximal ein paar Sekunden und dein Programm muss ihn immer 
rechtzeitig daran hindern indem es einen speziellen Befehl ausführt.

Der Watchdog erkennt nicht von alleine wen dein Programm hängt

von Jankey (Gast)


Bewertung
0 lesenswert
nicht lesenswert
wenn der Controller nicht den WD aktiviert hat kann garnix sein, der 
Microcontroller in meinem Auto der die Zentralverriegelung alla Peugot 
206 blinken lässt ist seit 2004 in einer while schleife ... und erfreut 
mich jeden morgen mit einem Blinklichtgewitter ... :)

von StinkyWinky (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> Autor:  Klaus Falser (kfalser) schrieb:
>
> Den Watchdog brauchst Du nur, wenn es ganz,ganz wichtig ist, dass dein
> Prozessor wieder von selbst auf die Füße kommt und schützt eher vor
> Softwarefehlern.

Meiner Meinung nach verschleiert ein WD die SW-Fehler, er schützt nicht 
davor!
Allerdings kann es durchaus sein, dass der Kunde zufrieden ist, weil er 
nichts vom SW-Fehler merkt.

von 6637 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Sinnvollerweise macht man fuer eine Meldung ein timeout. Dh nach dem 
letzten empfangenen Zeichen kommt nach zB 1s ein timeout, der den 
Zustand auf nicht mehr wartend aendert. Gehoert sich fuer ein 
ordentliches Design. Ein Watchdog ist hier fehl am Platz.

von Unbekannter (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> Also würde der Controller auch artig
> eine Woche warten ohne das das Programm abstürzt?

Nein, natürlich nicht.

So ein Controller hat auch Anspruch auf eine geregelte Arbeitszeit, 
Wochenende und Urlaubstage.

Die genauen Modalitäten sind von Controller zu Controller verschieden, 
jenachdem in welchen Gewerkschaften die Controller organisiert sind.

Die PIC-Prozessoren arbeiten z.B. immer noch nur 35 Stunden die Woche, 
während die AVRs schon 40 Stunden arbeiten (müssen).

Allerdings wollen die AVRs bald streiken da sie gar nicht mehr arbeiten 
wollen.

Ausserdem gibt es noch das Controller-Schutz-Gesetz.

Das legt fest, dass Controller keine eintönige und langweile Arbeiten 
durchführen dürfen, regelmäßig fortgebildet werden müssen und dass sie 
keinen hohen Umweltbelastungen ausgesetzt werden dürfen.

von Anonymous (Gast)


Bewertung
0 lesenswert
nicht lesenswert
OP will nur arme kleine Tron-Männchen quälen :->

von Paul Baumann (Gast)


Bewertung
0 lesenswert
nicht lesenswert
@Unbekannter
Bei Dir toggelt wohl ein Portpin? ;-) Warte nur, gleich löst einer der 
Moderatoren einen Interrupt aus. (Die Interrupts der Moderatoren sind 
immer maskiert, nie weiß man, wer es gerade war)

MfG Paul

von Gast der das Posting eröffnet hat (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Wie realisiert man denn ein Timeout?

Also eine Funktion wie: Wenn nach 10s kein Zeichen über den UART 
gekommen ist höre auf zu warten und gehe zu dem Programmteil "soundso"?

von STK500-Besitzer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
>Wenn nach 10s kein Zeichen über den UART
>gekommen ist höre auf zu warten und gehe zu dem Programmteil "soundso"?

Bei jedem empfangenen Zeichen einen Timer (kann auch ein entsprechend 
erweiterter sein) zurücksetzen.
Irgendwo (ISR oder main) die "Uhrzeit" abfragen und entsprechend 
reagieren.
Aus der Main heraus stellt es das kleiner Problem dar...

von 6637 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich hab jeweils einen Tick Interrupt, der am Timer0 laueft, in der Regel 
10ms. Dort decrementiere ich die Timeoutvariable, softern ungleich Null. 
Bei jedem empfamgenen Zeichen wird diese Timeout variable neu auf 100 
gesetzt. Umd im Main wird die Timeoutvariable geprueft. Wenn Null war's 
ein Timeout, macht dann den Zustand auf Null oder so.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.