Ralph schrieb:
> Hallo zusammen,
>
>
> Aufgabe :Watchdog Handling
>
> Problematik:
>
> Überwachung von drei Signale.
> Wenn eine der Signale nach eine bestimmte Zeit nicht dektiert wird,
> springt dann WDT und schaltet das Board aus (Reset).
>
> Dieses Vorgehen ist nicht Optimal.
Viel mehr ist der Code nicht optimal. Ein häufiger Anfängerfehler ist
es, in einer Endlosschleife auf das Eintreten von Ereignissen zu warten,
statt einen Zustandsautomaten zu implementieren, der Ereignisse und
deren Behandlung entkoppelt.
> Es wäre besser, wenn eine Fehlermeldung geworfen wird (Wie z.B Signal 1
> könnte nicht detektiert werden).
Ich nehme mal an, dass du mit "Signal" einen Pegel (0 bzw. 1) oder eine
Flanke(0->1 bzw. 1->0) meinst?!
> Das ist zu Theorie
> Meine Fragen an euch:
> Ist dieses Vorgehen überhaupt möglich?
Nein. Man prüft zyklisch, ob dieses Ereignis inzwischen eingetreten ist,
ggf. unter Zuhilfenahme einer ISR, welche einfach ein Bit in einem
bestimmten Register als Merker setzt.
Braucht man eine Überwachung der Zeit, muss man zusätzlich prüfen, wie
lange man schon auf das Ereignis wartet. Sinnvollerweise macht man das
mit einem Timerinterrupt und einem Zähler, der in der ISR hoch oder
runter gezählt wird. Der Zähler wird immer beim Eintreten des
Ereignisses zurückgesetzt, und während des Wartens auf das Ereignis wird
der Zählerstand überwacht. Das Ablaufen des Zählers ist ein weiteres
Ereignis, was geprüft wird, und dessen Behandlung wäre dann die Ausgabe
einer Fehlermeldung.
> Kann ich den WDT ausserhalb der main() Funktion auch steuern
Natürlich kann man das, und man muss es in längeren Unterprogrammen auch
unbedingt tun. Sonst können diese nie bis zum Ende durchlaufen, weil der
Watchdog-Reset dies verhindert.
> Sorry für die Fragen aber der Micokontroller Welt ist nue für mich und
> bin für jede Hilfe dankbar.
Für Fragen muss man sich nicht entschuldigen, wenn man sich bemüht, sie
ordentlich zu stellen.
;-)