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


von Gast (Gast)


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)


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)


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_)


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)


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)


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)


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)


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)


Lesenswert?

OP will nur arme kleine Tron-Männchen quälen :->

von Paul Baumann (Gast)


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)


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)


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)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.