mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Watchdog


Autor: Helge (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Ich habe den Mega128 und benutze in meinem Programm den Watchdog. Nun 
ist ein Stück Prog bei wo auf ein bestimmtes Zeichen der USART gewartet 
wird. Dies kann unter Umständen 7sec dauern. Mein Watchdog wartet max 
2.2sec. Kann ich die Zeit irgendwie erhöhen? Es kann auch möglich sein 
das dieses bestimmte Zeichen nicht auftaucht. Dann soll der Watch in 
aktion treten und neu starten.
Ich hoffe jemand hat ne Idee :-)

Gruß Helge

Autor: mikki merten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein, kann man nicht weiter erhöhen. Der Einstellbereich ist für eine 
Watchdog auch recht groß. In deiner Anwendung solltest du über 
Timernutzung mit evtl. zusätzlichem Zähler nachdenken.

Autor: Helge (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den Gedanken hatte ich auch schon.Aber bei dem getchar-Befehl wartet er 
ja auf ein Zeichen. Wenn nun keins kommt hängt er da fest. Da siehts ja 
dann mit nem Zähler auch schlecht aus.
Gruß Helge

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

du triggerst während der Warteschleife ständig den Watchdog. Das ist 
aber nicht besonders sinnvoll und untergräbt das Prinzip eines Watchdog 
etwas.

Matthias

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aber immer noch besser, als den WD in einer Timer-ISR zu triggern..., so 
bleibt der WD wenigstens für den Rest des Programms aktiv.
Du prüfst vor getchar(), ob überhaupt ein Zeichen gekommen ist, wenn 
nicht, wieder prüfen, ansonsten Zeichen abholen.
Mit dem internen Watchdog bin ich übrigens nicht allzu glücklich, mir 
gefallen externe besser, die ich auf 2 Flanken triggern muß.

Autor: Helge (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich werde da wohl was externes basteln evtl. übern Int.
Wenn ich erst prüfe ob ein Zeichen da ist, und dann keins kommt habe ich 
ja das selbe Problem. Das Prog hängt an dieser Stelle fest.
Dank euch für die Tips
Gruß Helge

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dafür gibt es eine Lösung:

Man triggert den Watchdog innerhalb des Timerinterrupts.

Das ist z.B. immer bei größeren Programmen nötig, wenn mehrere Prozesse 
mit unterschiedlichen Timeout-Zeiten überwacht werden müsen.


Jeder Prozess erhält dabei seinen eigenen Timeout-Zähler, der dann bei 
ordnungsgemäßer Ausführung von dem Prozess selbst immer auf den 
Startwert gesetzt wird.

Der Timerinterrupt zählt nun jeden dieser Zähler runter und wenn auch 
nur einer den Wert 0 erreicht, bleibt er einfach in einer Endlosschleife 
hängen, bis dann der Hardware-Watchdog zuschlägt.


Damit ist es z.B. auch möglich, wenn ein wichtiger Prozess nur einmal je 
24h aktiv werden muß auch dann nur für diesen einen 24h-Timeout 
aufzusetzten.


Dadurch, daß alle anderen Interrupts gesperrt sind, kann auch keiner 
diese Endlosschleife unterbrechen.


Bei hohen Anforderungen an die Sicherheit, kann ja der Timerinterrupt 
auch noch den Stackpointer auslesen und wenn dieser z.B. zu weit in den 
Datenbereich reingelaufen ist, dann auch die Endlosschleife ausführen.


Peter

Autor: Helge (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter
Danke dir für die umfangreiche erklärung.Das hört sich recht logisch 
an.Ich werde mich heute Abend daran mal versuchen.
Gruß Helge

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.