Forum: Mikrocontroller und Digitale Elektronik Watchdog Reset - Endlosschleife


von K. B. (Gast)


Lesenswert?

Ich habe eine Multiplexsteuerung programmiert, welche bisher auch 
wunderbar funktioniert. Dabei setzte ich auch den Watchdog-Timer ein, um 
ggf. den Mikrocontroller neu zu starten. Das sollte im Normalbetrieb 
natürlich nicht auftreten, aber man weiß ja nie ;).

Jedenfalls betrete ich im Falle eines Watchdog Resets eine 
Endlosschleife. Das schaut in etwa so aus:
1
if (MCUCSR & _BV(WDRF)) {
2
3
    wdt_disable();
4
    while (1);
5
6
}

Das funktioniert soweit auch gut. Da ich aber zum Ersten Mal mit dem 
Watchdog arbeite, würde mich noch interessieren, ob das "gängige" Praxis 
ist bzw. ob es da etwas zu beachten gibt? Ich arbeite mit einem 
ATmega32.

Vielen Dank!

von (prx) A. K. (prx)


Lesenswert?

Wäre zu bedenken, dass das Bit im MCUCSR bis zum Stromverlust erhalten 
bleibt, du also auch mit manuellem Reset aus der Nummer nicht mehr 
heraus findest. Es könnte als Sinn ergeben, das Bit explizit zurück zu 
setzen.

von K. B. (Gast)


Lesenswert?

Was haltet ihr eigentlich von der Idee einen Watchdog Reset im EEPROM 
festzuhalten, sodass ein einfaches "Stecker raus, Stecker rein" nicht 
ausreicht um das Ganze wieder in Gang zu setzen. Es handelt sich hier 
nicht um ein Consumer-Gerät, sondern um ein Freizeit-Projekt und mir 
gefällt die Idee gerade ganz gut. Oder übersehe ich etwas?

von (prx) A. K. (prx)


Lesenswert?

Ok, du willst das also so. Soll das eine Art elektronische 
Selbstvernichtung werden? Einmal ausgelöst hilft noch HVP?

von Peter D. (peda)


Lesenswert?

K. B. schrieb:
> ob das "gängige" Praxis
> ist

Nö, völlig unüblich (unsinnig).

Man startet die Applikation neu und hofft, daß es ne Weile läuft bis zum 
nächsten Fehler.
Besonders in sicherheitsrelevanten Anwendungen (AKW, Raumfahrt, 
Luftfahrt, Medizin) wäre das komplette Versagen der absolut 
unerwünscheste Zustand.

von Bronco (Gast)


Lesenswert?

Der Sinn des Watchdogs ist es, ein nicht mehr funktionierendes System 
per Reset wieder in einen funktionierenden Zustand zu bringen.
Dein Ansatz bringt ein nicht mehr funktionierendes System in einen nie 
mehr funktionierenden Zustand.

von Steel (Gast)


Lesenswert?

Hehe, schön gesagt von Bronco.

@TE: Du hast den Sinn eines Watchdog noch nicht verstanden.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Naja, es kann durchaus Sinnvoll sein in einen "Fehler" Zustand zu 
laufen, aber wenigstens einen Resetknopf sollte man dann vorsehen. Der 
"Sinn" eines Watchdog ist der den man ihm gibt, und wenn der TE will, 
das nach so einem Fehlerzustand das Gerät erst dann wieder laufen soll 
wenn er es neu programmiert hat mit einem Bugfix wieso auch nicht...

von K. B. (Gast)


Lesenswert?

Naja, die 15 ms sind halt deutlich mehr als die eigentliche Zeit, die 
meine LEDs im Multiplexbetrieb beleuchtet werden. Insofern habe ich 
"Angst", dass ich bei einem Programmierfehler, der zu einem ständigen 
Neustart führt meine LEDs kaputt mache.

von Karl H. (kbuchegg)


Lesenswert?

K. B. schrieb:
> Naja, die 15 ms sind halt deutlich mehr als die eigentliche Zeit, die
> meine LEDs im Multiplexbetrieb beleuchtet werden. Insofern habe ich
> "Angst", dass ich bei einem Programmierfehler, der zu einem ständigen
> Neustart führt meine LEDs kaputt mache.


Dann musst du dein Programm eben sorgfältig testen und entwickeln.

Der Watchdog ist nicht so sehr dazu da, um Programmfehler abzufangen. 
Die sind schon dein Bier in der Entwicklung. Der Watchdog hat den Sinn, 
all die Dinge abzufangen, die du nicht beeinflussen kannst - wie zb EMV 
Störungen.


Wenn dein Multiplex nach den Regeln der Kunst gemacht ist (Timer mit 
ISR) und du nicht in deinem Programm laufend die Interrupts ab-, an-, 
um- schaltest, dann passiert da auch nichts. Der Timer läuft - die ISR 
wird aufgerufen - in der ISR werden die LED umgeschaltet.

100% Sicherheit gibt es sowieso nicht. Aber in erster Linie muss dein 
Programm auch ohne Watchdog sauber arbeiten. Der Watchdog ist nur der 
allerletzte Rettungsanker für all die Dinge, die im Feldeinsatz 
passieren können und die nicht vom Programmierer beeinflussbar sind. Die 
Denkweise "Der Watchdog erlaubt mir Programmfehler zu machen", ist der 
falsche Weg.

von Peter D. (peda)


Lesenswert?

Naja, man muß LED-Anzeigen ja nicht unbedingt bei maximalem Strom 
betreiben.
High-Efficiency sind auch weit darunter recht hell.
Z.B. betreibe ich HDSP-K121 mit nur 10mA, d.h. 2,5mA effektiv bei 4 
Digit Multiplex und habe sogar noch ne rote Kontrastscheibe davor. Die 
sind auch an Tageslicht gut zu erkennen.

von Peter D. (peda)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Der Watchdog hat den Sinn,
> all die Dinge abzufangen, die du nicht beeinflussen kannst - wie zb EMV
> Störungen.

Da bin ich entgegengesetzter Meinung.
EMV/EMI hast allein Du selber zu verantworten (Schaltplan, Layout, 
Gehäuse).
Ist die Störung so groß, daß sie die CPU beeinflußt, kann sie genauso 
gut auch den Watchdog disablen.

Aber es entstehen immer mal Programmfehler. Sei es durch Zeitdruck oder 
fehlende Strukturierung, mangelnde Erfahrung, fehlerhafte Spezifizierung 
oder auch durch Bugs des MC.
Schnell rast mal ein Pointer in den Wald oder an Eingängen liegen 
unerwartete Zustände oder man hat ein Errata nicht gelesen.
Und nur dafür ist der Watchdog da.

von Karl H. (kbuchegg)


Lesenswert?

Peter Dannegger schrieb:

> Aber es entstehen immer mal Programmfehler. Sei es durch Zeitdruck oder
> fehlende Strukturierung, mangelnde Erfahrung, fehlerhafte Spezifizierung
> oder auch durch Bugs des MC.

Zweifellos

> Schnell rast mal ein Pointer in den Wald

Nö. Ein Pointer darf nicht schnell mal durch den Wald rasen. Ob mit oder 
ohne Watchdog. Programmfehler ist Programmfehler.

> oder an Eingängen liegen
> unerwartete Zustände oder man hat ein Errata nicht gelesen.
> Und nur dafür ist der Watchdog da.

Das: ja.

von (prx) A. K. (prx)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Nö. Ein Pointer darf nicht schnell mal durch den Wald rasen. Ob mit oder
> ohne Watchdog. Programmfehler ist Programmfehler.

Ich nehme an, deine Programme sind bei Auslieferung stets absolut 
korrekt und fehlerfrei. Beweisbar. ;-)

von Peter D. (peda)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Programmfehler ist Programmfehler.

Du findest also alle Programmfehler schon vor der Serienproduktion und 
Auslieferung?

von Wilhelm F. (Gast)


Lesenswert?

Peter Dannegger schrieb:

> Ist die Störung so groß, daß sie die CPU beeinflußt, kann sie genauso
> gut auch den Watchdog disablen.

Daß an manchen µC der Watchdog disabled werden kann, ist für mich sehr 
merkwürdig. Der olle SAB80C517 beispielsweise hat sogar einen Pin, womit 
man per Hardware den Watchdog bei Start ohne Software zwangsaktivieren 
kann. Mit der falschen Software im EPROM schlug dann eben der Watchdog 
garantiert zu. Diese µC waren auch für sicherheitskritische Systeme 
designt, bei denen der Watchdog auf keinen Fall ausfallen soll, und auch 
nicht per Zufall durch ein paar kippende bits zurück gesetzt werden 
kann.

Na ja, absolut sicher ist sowieso nichts, nur ein bestimmtes hohes Maß 
an Sicherheit erreichbar. Z.B. ist ja auch der Defekt des µC selbst 
denkbar.

von Karl H. (kbuchegg)


Lesenswert?

Peter Dannegger schrieb:
> Karl Heinz Buchegger schrieb:
>> Programmfehler ist Programmfehler.
>
> Du findest also alle Programmfehler schon vor der Serienproduktion und
> Auslieferung?

Nö.
Aber ich benutz nicht den Watchdog um Programmfehler zu kaschieren.
(Und du tust das auch nicht)

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.