Watchdog beim Mega2560 aktivieren, Risiko?

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Watchdog beim Mega2560 aktivieren, Risiko?

      Hallo,

      ich wollte in meinem Programm noch zur Sicherheit den
      Watchdog Timer aktivieren. Jetzt lese ich auf verschiedenen Seiten,
      das der Controller manchmal danach nicht mehr ansprechbar ist.

      forum.arduino.cc/index.php?topic=227303.0

      So wie ich das verstehe, sollte es bei 8 Sekunden eigentlich klappen,
      aber bleibt da ein Restrisiko?
      Es ist das gängige Arduino Mega Board mit dem original Bootloader.

      Benutzt der eigentlich einen der Timer, oder hat der einen Eigenen?

      Gruß Ralf
    • Das Problem klingt irgendwie logisch.

      Mann muss verstehen, dass der Watchdog, wenn er aktiviert ist, regelmäßig resettet werden muss. Tut man das nicht, wird ein Neustart ausgelöst.
      Das ist wie ein Reset am Reset-Pin. Damit kann man ein Hängenbleiben des Controllers verhindern. So die Theorie. Ein Resetten macht man üblicherweise in der Hauptschleife. Auf jeden Fall an einem Punkt, wo das Programm ständig durchläuft innerhalb der Watchdog-Zeit.

      Wenn man nun versucht etwas neues reinzuspielen, wird ja der Bootloader aktiviert. Man springt also ins Bootloader Programm per Jump.
      Hetzt gibts da ha auch wieder eine Hauptschleife. Diese setzt aber den Watchdog nicht zurück,

      Da vermute ich das Problem.

      Ich würde in dem fall mal ein Programmer an die ISP anschließen und prüfen, ob der Watchdog per Software eingeschaltet wird.
      Dann könnte man auch das Programm (Bootloader) neu reinspielen über ISP. Dann ist dein Arduino wieder Jungfreulich.

      Was meinst du mit den 8s? das kann ich grad nicht nachvollziehen.
    • Hallo Mitch,

      mir ist schon ungefähr klar wie der funktioniert, habe ihn auch
      schon ohne Probleme eingesetzt, aber das war kein Arduino Board.
      Mit den 8 Sekunden meine ich die Zeitspanne, die ich wählen würde,
      in der er zurückgesetzt werden muß.
      Ich glaube, ich lass die Finger davon, das Teil ist für meine Tochter,
      die arbeitet in Schottland in einem Labor.
      Das Programm läuft jetzt tadellos und es wär ein Desaster, wenn es
      da unbedienbar wird, oder nicht mehr geändert werden kann.

      Vielen Dank für die Antwort. :)

      Gruß Ralf
    • Ich vermeide grundsätzlich den Watchdog, wenn es nicht einen zwingenden Grund dafür gibt.

      Ein Watchdog verschleiert Fehler. Ich glaube auch, dass 8s nicht eingestellt werden können.

      Da müsste ich jetzt im Datenblatt schauen.

      Wenn du den Watchdog auf 8s einstellen willst, nehme ich an, dass es bis zu 8s dauern kann, bis ein Programm weiter läuft.
      Ich denke in so einem Fall da sollte man den Programmablauf nochmal untersuchen, ob das auch anders geht.

      Ich habe den Watchdog bisher nur benutzt, wenn ich im Speepmode war und hatte keine Möglichkeit den Controller zu wecken außer dem Watchdog.
      Oder wenn ich im Programm z.B. via serieller Schnittstelle ein Update rüberspielen will, dann konnte ich den Controller per Watchdog resetten, damit der Bootloader aktiviert wurde.

      Sonst hatte ich nie einen zwingenden Grund, einen Watchdog einzusetzen.
      Wenn die Firmware abstürtzt finde ich es persönlich besser, wenn man die Effekte noch bemerkt und diese zur Fehlerasuche verwenden kann.
      Wenn der Controller heimlich einfach resettet, fällt der Fehler vielleicht viel zu spät auf.
      Ich resette das Gerät lieber selber, dann weiß ich, dass da noch ein Problem ist.

      Aber das must du wissen, wie die Prioritäten sind.
      Watchdog ja / nein.
    • Mitch64 schrieb:

      Ein Watchdog verschleiert Fehler. Ich glaube auch, dass 8s nicht eingestellt werden können.

      Da müsste ich jetzt im Datenblatt schauen.
      8s gehen maximal.

      Mitch64 schrieb:

      Sonst hatte ich nie einen zwingenden Grund, einen Watchdog einzusetzen.
      Wenn die Firmware abstürtzt finde ich es persönlich besser, wenn man die Effekte noch bemerkt und diese zur Fehlerasuche verwenden kann.
      Wenn der Watchdog nicht da wäre, würden vile mehr Leute meckern, dass es ihn nicht gibt.
      Nur weil du ihn nicht nutzt, ist er nicht gleich unnütz.
      Wenn externe Pheripherie abstürzt und ein Bus klemmt, dann bist du froh, wenn du den Watchdog hast.

      Mitch64 schrieb:

      Wenn der Controller heimlich einfach resettet, fällt der Fehler vielleicht viel zu spät auf.
      Ich resette das Gerät lieber selber, dann weiß ich, dass da noch ein Problem ist.
      Das ist der Vorteil einer Programmierung, der Controller kann sogar den Reset selber machen.
      Es gibt ein Register, das du auslesen kannst, um den Grund des Resets zu finden.
    • Ich habe nicht behauptet dass der Watchdog unnütz ist.

      Was ich sagen wollte ist, dass man ein Programm so schreiben sollte, dass es nicht hänge bleibt (Timeouts verwenden z.B).
      Wenn Fehler im Programm sind, ist und war der Watchdog noch nie das Mittel zur Wahl.

      Und wenn da ein Bus hängt und der watchdog nicht bedient wird.
      Was steht da dann in dem Register?
      Und wie heißt das denn?
    • Mitch64 schrieb:

      Was steht da dann in dem Register?
      Wenn ich das richtig verstanden hab: Woher der Reset kam Watchdog/Hardware/Software?
      Natürlich muß man ihn nicht benützen aber besser er macht einen Reset als er hängt sich auf.
      Dann ist er als zusätzlicher Timer zu nutzen Er kann einen Int ausführen und wenn er dann immer noch keinen Reset bekommt Resetet er wirklich. In der Int könnten dann Programmmparameter ins Eeprom geschrieben werden die, die Fehleranalyse vereinfachen.
    • Sei es wie es will.
      Das ändert nicht an dem Problem was anfangs geschildert wurde.

      In dem Register MCUSR wird nur gespeichert, ob ein Reset von Watchdog erfolgte.

      Was nützt das, wenn man das nachher nicht irgendwie dem Anwender mitteilt.

      Das mit den 8s stimmt, habe ich auch gelesen.

      Aber das Eingangs angesprochene Problem hängt mit dem Watchdog zusammen.

      Unter Watchdog Timer im Datenblatt habe ich folgenden Hinweis gefunden:

      Spoiler anzeigen

      Note:
      1. The example code assumes that the part specific header file is included.
      2. If the Watchdog is accidentally enabled, for example by a runaway pointer or brown-out condition, the device will be
      reset and the Watchdog Timer will stay enabled. If the code is not set up to handle the Watchdog, this might lead to
      an eternal loop of time-out resets. To avoid this situation, the application software should always clear the Watch-
      dog System Reset Flag (WDRF) and the WDE control bit in the initialisation routine, even if the Watchdog is not in
      use.


      So wie ich das verstehe heißt das im übertragenen Sinn, das man den Bootloader modifizieren muss, um den aktiven Watchdog dort auszuschalten.
      Denn der bleibt aktiv. Zumindest wenn der per Fuse aktiviert wurde.
    • Dann besser nicht per Fuse aktivieren sondern falls gewünscht vor der Main Loop. Das sollte eingendlich auch immer reichen. Oder kennt jemand das Abschmieren vor dem eigendlichen Programmstart ? Ich starte ihn nach den Dim / Config vor dem Enable Interupts. Solange es weniger als 10 Resets im Jahr sind mache ich mir da wenig Sorgen um den Code.

      Mitch64 schrieb:

      In dem Register MCUSR
      Eigendlich eine gute Idee es auszuwerten. Damit würde man erkennen ob er abgeschaltet wurde, die Stromversorgung hakt , ein schraubendreher inden ISP port "fällt" oder wirklich der Watchdog eingriff.
      Bisher habe ich nur die Starts gezählt.