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?
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...
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
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
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 ... :)
> 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.
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.
> 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.
OP will nur arme kleine Tron-Männchen quälen :->
@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
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"?
>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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.