mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Priorität: Watchdog Trigger Task


Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits

Ich arbeite zur Zeit an einer grösseren uC-Software mit einem 
kommerziellen RealTimeOS. (ca. 2000 Sourcedateien, Binary-Executable ca. 
3 MByte) Die Software besteht aus zahlreichen Tasks unterschiedlicher 
Priorität. Einer der Task ist der WatchdogTriggerTask WDT(), welcher den 
Watchdog  alle 250ms triggern soll, der Watchdog-Timeout liegt bei ca. 
2.5 Sekunden.

Die Software muss beim Kunden über Wochen zuverlässig laufen, ohne 
Ausfälle oder Restarts. Die Rechenleistung des Prozessors ist 
ausreichend bemessen, die CPU-Belasung liegt ca. zwischen 10..40%

Bisher lief die SW stabil auch mit einer beliebig tiefen WDT()-Prio. 
Kürzlich ist jedoch ein neuer Task hinzugekommen, welcher in gewissen 
Situationen den WDT() für >2.5 Sekunden nicht mehr zu Zug kommen lässt, 
wenn die WDT()-Prio tiefer ist. => Restart

Nun wurde bei uns im Geschäft eine Diskussion entfacht, über die Frage, 
welche Priorität der WatchdogTriggerTask haben soll.

Es gibt da unterschiedliche Ansichten:
______________________________________________________

Der WDT() soll die höchste Priorität haben:
=> Kein Reset solange der Task-Scheduler überhaupt noch läuft.
=> Keine Kontrolle ob alle Tasks genügend Rechnleistung abkriegen,
   bzw. ob niedrig priorisierte Task längere Zeit blockiert werden.

Der WDT() soll die gleiche Priorität haben, wie der Task mit der 
niedrigsten Priorität (ausgenommen IdleTask)
=> Kein Reset, solange auch Tasks mit niedriger Prio regelmässig
   Rechenzeit abkriegen.
=> Risiko, dass auch Task mit tiefer Prio bei Überlast den WDT()
   zu lange blockieren und ein SW-Restart auftritt.

Der WDT() soll die niedrigste Priorität haben (ausgenommen IdleTask)
=> kein Reset, solange auch noch regelässig IdleTime verfügbar ist.
=> Risiko, dass auch Task mit tiefer Prio bei Überlast den WDT() zu
   lange blockieren und ein SW-Restart auftritt.

Weitere Möglichkeiten...???
______________________________________________________

Ich bin einfach an verschieden Meinungen und Ansichten interessiert, 
bzw. möchte wissen, wie ihr dies bei euch so macht.

Oder wäre es sogar sinnvoll, die WDT() Priorität für Test und Messungen 
anders zu wählen, als für die SW die an den Kunden geliefert wird?

Bin gespannt auf eure Ansichten.

Andy

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas wrote:

> Der WDT() soll die höchste Priorität haben:
> => Kein Reset solange der Task-Scheduler überhaupt noch läuft.
> => Keine Kontrolle ob alle Tasks genügend Rechnleistung abkriegen,
>    bzw. ob niedrig priorisierte Task längere Zeit blockiert werden.

Das ist Quatsch.
Dann schalte doch den Watchdog gleich aus, kommt auf selbe raus.

Der Watchdogtask muß natürlich alle wichtigen Prozesse überwachen, ob 
sie in einem bestimmten Intervall ausgeführt werden.
Dazu hat er entsprechende Timeout-Counter und wenn einer davon 
abgelaufen ist, bleibt er einfach stehen, bis der Watchdog zuschlägt.
Damit kann man dann auch Prozesse überwachen, die z.B. nur alle 1h 
ausgeführt werden müssen.


Er darf nicht die höchste Priorität haben, damit er nicht die eiligen 
Sachen verzögert.
Er muß ne mittlere Priorität haben.


Peter

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in einem multitasking-system ist ein wdt total sinnlos. im grunde prüfst 
du nur, ob die task die den wdt antriggert, noch läuft.

Autor: Drinverter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn deine Software "beim Kunden über Wochen zuverlässig laufen, ohne
Ausfälle oder Restarts" dann bringt dein Watchdog gar nichts denn wenn 
er zuschlägt ist das Kind schon im Brunnen (deadlock). Dann hast du ja 
dein Ziel schon verfehlt. Ein Watchdog macht nur Sinn
- wenn man erstens ein Sicherheitskritisches System am durchdrehen 
hindern will/muss (ist vorgeschrieben)
- wenn man dem Benutzer das lästige drücken des Reset-Schalters ersparen 
will

Wenn du ein zuverlässiges System brauchst hilft nur eins: Fehlerfreier 
Code

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die bisherigen Inputs

>Er darf nicht die höchste Priorität haben, damit er nicht die eiligen
>Sachen verzögert.
Der WDT braucht kaum CPU-Zeit, nebst dem RTOS Context-Switching werden 
bloss zwei drei uC-Register beschrieben.

>Wenn du ein zuverlässiges System brauchst hilft nur eins: Fehlerfreier
>Code
Das wäre auch mein Wunsch, aber nicht ganz realistisch. Wenn Du ein 
Projekt dieser Grösse (C und C++ gemischt, seit 10 Jahren haben 
zahlreiche Firmen und Programmierer die ihren Input beigetragen haben) 
fehlerfrei hinkriegst, wirst Du sofort angestellt. ;o))

>-wenn man dem Benutzer das lästige drücken des Reset-Schalters ersparen
>will
Ja, das will man. Normalerweise ist kein "Operator" vor Ort, dann ist es 
immer noch besser das System bootet selbständig mit einem 
Funktions-Unterbruch von einigen 10 Sekunden

Autor: Kanzler Gorkon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also wir machen das hier so:
1. Unterscheidung Runtimeüberwachung <-> Watchdog:
Die Runtimeüberwachung übernimmt der Scheduler, ist also quasi ein 
Softwarewatchdog.
2. Die Peripherie/Hardware, die dran hängt hat einen eigenen 
Hardwarewatchdog der beisst, wenn die CPU für "längere" Zeit nichts tut.
Sinnvollerweise wird dieser Peripheriewatchdog in einem Task getriggert, 
der prüfen kann, ob die IOs noch bedient werden, also im einfachsten 
Fall er selbst. Mit einer höheren Priorität triggern hat meiner Meinung 
nach nur einen Sinn, wenn der höher priorisierte Task entsprechende 
Überprüfungen vornimmt, bevor er triggert.

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.