Ist es möglich, einen ausfallsicheren Watchdog-Timer in Software zu implementieren?

Ich möchte einen Code für den Watchdog-Timer in meinen Quellcode einfügen, damit das Board automatisch zurückgesetzt wird, wenn Programme hängen bleiben. Ich verwende Mediatek Linkit One Board.

Hat der MT2502 nicht bereits einen Watchdog-Timer eingebaut?

Antworten (2)

Sie können an geeigneter Stelle in Ihrem Programm eine Funktion erstellen, die "den Hund füttert". Wenn der Hund nicht gefüttert wird, läuft der Watchdog-Timer ab und setzt das Programm zurück. Sehen Sie sich die Mikrocontroller-Dokumentation an, um zu sehen, wie dies implementiert wird. Im Allgemeinen muss der Watch-Dog-Timer richtig konfiguriert (mit geeigneten Prescaler-Werten), aktiviert und dann regelmäßig gelöscht werden, bevor der Timer abläuft. Die API-Referenzen von Mediatek Labs sehen nicht so aus, als würden Sie Zugriff auf diese Funktionalität auf niedrigerer Ebene erhalten, aber das technische Briefing des SOC-Prozessors für den ARMyEJ-S enthält einen Watchdog-Timer (S. 8), der die einzige Erwähnung ist. Wenn Sie in der Dokumentation keine Antwort darauf finden, würde ich sie kontaktieren und direkt danach fragen und etwas Druck auf ihre Entwickler ausüben (wie es bereits in ihrem Forum angefordert wurde).

Ja, Sir, wie Sie zu Recht sagten, bieten die API-Referenzen von Mediatek Labs keinen Zugriff auf diese Funktionalität auf niedrigerer Ebene, und es gibt keine Beschreibung im technischen Briefing von ARM7EJ-S, wie der Watchdog verwendet wird. Das macht es jetzt schwierig, wenn das Board in Echtzeitanwendungen eingesetzt werden soll. Ja, es wäre toll, wenn Sie sie kontaktieren und direkt danach fragen. Danke schön.

Ich habe keine Ahnung, was ein Mediatek Linkit One-Board ist (und Sie haben keinen Link angegeben), aber im Allgemeinen können Sie das nicht. Wenn Ihr Programm hängt, wie wird der Watchdog-Code ausgeführt?

Üblicherweise müssen Watchdogs in Hardware implementiert werden – entweder intern durch einen Teil der CPU, der unabhängig vom Anwenderprogramm läuft, oder, wenn das nicht möglich ist, wird ein externer Watchdog eingesetzt. Ihr Programm würde den externen Watchdog regelmäßig zurücksetzen, indem es einen Impuls sendet. Wenn der externe Watchdog innerhalb einer bestimmten Zeit keinen Übergang sieht, wird ein Reset generiert.

Wenn die Hardware einen Timer-Interrupt unterstützt (zur Unterstützung von preemptivem Multitasking), wäre eine Software-Watchdog-Zeit auf Betriebssystemebene möglich. (Da das Betriebssystem Timer-Interrupts deaktivieren kann, hätte ein solcher nicht ganz so viel Abdeckung wie ein Hardware-Watchdog.) Es könnte möglich sein, einen Prozess auf Benutzerebene zu haben, der garantiert (gemäß der Scheduler-Implementierung des Betriebssystems) mit einem Minimum ausgeführt wird Frequenz und dergleichen könnten verwendet werden, um Watchdog-Funktionalität bereitzustellen. Das Timeout in POSIX select() würde ein Mittel für einen Watchdog auf Benutzerebene bereitstellen.