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!
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.
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?
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.
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.
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...
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.
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.
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.
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.
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.
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. ;-)
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.
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)