Kann mir jemand sagen, ob wir den Watchdog während des Startvorgangs/der Bootcode-Ausführung aktivieren oder deaktivieren sollten? Mein Freund hat mir gesagt, dass wir den Watchdog normalerweise im Bootcode deaktivieren. Kann mir jemand sagen, was der Vorteil oder Nachteil dabei ist??
Antworten
Zu viele Anzeigen?Meiner Meinung nach dienen Wachhunde drei, aber unterschiedlichen, Hauptzwecken, zusammen mit einem dritten, weniger stark verwandten Zweck: (1) Sicherstellen, dass in allen Fällen, in denen das System durcheinander gerät, es sich irgendwann wieder erholt; (2) Sicherstellen, dass, wenn Hardware aktiviert wird, die nicht zu lange ohne Service auskommen darf, alles, was solchen Service verhindern würde, das System relativ schnell herunterfährt; (3) Einen Mechanismus bereitstellen, durch den ein System eine Weile schlafen kann, ohne für immer zu schlafen.
Das Deaktivieren eines Wachhundes während eines Bootloaders kann Zweck #2 nicht beeinträchtigen, jedoch kann es Zweck #1 beeinträchtigen. Ich bevorzuge es, Wachhunde während eines Bootloaders aktiviert zu lassen und den Bootloader jedes Mal den Wachhund auslösen zu lassen, wenn etwas darauf hinweist, dass das System tatsächlich im Bootloader sein soll (z. B. jedes Mal, wenn es ein gültiges Bootloader-Befehlspaket empfängt). Bei einem Projekt, bei dem ich das nicht gemacht habe und der Bootloader einfach den Wachhund immer wieder gefüttert hat, konnten statische Entladungen manchmal Einheiten in den Bootloader-Modus drängen, wo sie für immer feststecken würden. Indem der Wachhund das System aus dem Bootloader holt, wenn kein tatsächliches Booten stattfindet, wird dieses Problem beseitigt.
Übrigens, wenn ich meinen 'ideal' eingebetteten Wachhundschaltkreis entwerfen würde, würde ich einen hardwarekonfigurierbaren Parameter für die maximale Wachhundzeit haben und Softwareeinstellungen für 'angeforderte Wachhundzeit' und 'maximale Wachhundzeit' haben. Anfangs wären beide Softwareeinstellungen auf Maximum eingestellt; jedes Mal, wenn der Wachhund gefüttert wird, wird die Zeit auf das Minimum der drei Einstellungen gesetzt. Die Software könnte die 'angeforderte Wachhundzeit' jederzeit auf jeden Wert ändern; die Einstellung für die 'maximale Wachhundzeit' könnte jederzeit verringert werden, aber nur über einen Systemreset erhöht werden.
Übrigens könnte ich auch einen "periodischen Reset"-Timer einbeziehen, der das System dazu zwingen würde, sich in regelmäßigen Abständen zurückzusetzen. Die Software würde das Verhalten dieses Timers nicht außer Kraft setzen können, aber sie könnte ihn abfragen und eine frühzeitige Zurücksetzung anfordern. Selbst Systeme, die mit einem Wachhund alles richtig machen, können in Zustände geraten, die 'kaputt' sind, aber der Wachhund wird ganz normal gefüttert. Wenn periodische geplante Ausfallzeiten akzeptabel sind, können periodische Resets solche Probleme vermeiden. Man kann die Auswirkungen solcher Resets auf die Systemnutzbarkeit minimieren, indem man sie frühzeitig durchführt, wann immer sie keine laufende Aktion stören würden. Zum Beispiel, wenn das Zurücksetzungsintervall auf sieben Stunden eingestellt ist, könnte man, sobald die Uhr auf eine Stunde heruntergeht, bitten, dass keine weiteren Aktionen angefordert werden, ein paar Sekunden warten, um zu sehen, ob jemand versucht, eine Aktion zu senden, gerade als sie gebeten wurden aufzuhören, und wenn keine Aktionen angefordert wurden, zurücksetzen und dann weitere Anfragen zulassen. Eine Anfrage, die gerade gesendet worden wäre, als das System kurz vor dem Zurücksetzen war, würde verzögert werden, bis das Zurücksetzen erfolgte, aber solange keine Anfragen länger als eine Stunde dauern würden, würden keine Anfragen verloren gehen oder gestört werden.
Weniger Transistoren schalten, nehme ich an, also minimaler Stromverbrauch. Je nachdem, wie viel du schläfst, könnte das tatsächlich eine große Ersparnis sein. Ihr Freund bezieht sich wahrscheinlich auf die Praxis, den WDT auszuschalten, wenn Sie eigentlich etwas tun, und ihn dann einzuschalten, wenn Sie schlafen. Es gibt einen netten Hinweis, den Microchip zu ihren PICs:
"Wenn der WDT während des normalen Betriebs deaktiviert ist (FWDTEN = 0), kann das Bit SWDTEN (RCON<5>) verwendet werden, um den WDT kurz vor dem Eintritt in den Schlafmodus einzuschalten"
- See previous answers
- Weitere Antworten anzeigen