Hallo Leute,
ich habe hier ein Programm geschrieben das in verschiedene Teile
unterteil ist. Jeder Teil läuft unabhängig voneinander.
Wird also ein Teil des Programms nicht mehr durchlaufen funktioniert der
Rest immer noch.
Nun möchte ich etwas programmieren damit ich erkennen kann ob ein
Unterprogramm nicht mehr bearbeitet wird und dann einen Reset auslösen.
Was ich schon gemacht habe das ich eine Variable hochzählen lasse bei
jedem Unterprogrammduchlauf. Wird ein Unterprogramm nicht mehr
durchlaufen wird die Variable nicht mehr hochgezählt und der Watchdog
ausgelöst.
Ungefähr so
1 | //Unterprogramme sind nicht in der Main Schleife
|
2 | //Unterprog 1
|
3 | // ...
|
4 | if(counter == 0)
|
5 | counter = 1;
|
6 | // ...
|
7 | //Unterprog 2
|
8 | // ...
|
9 | if(counter == 1)
|
10 | counter = 2;
|
11 | // ...
|
12 | //Unterprog 3
|
13 | // ...
|
14 | if(counter == 2)
|
15 | counter = 3;
|
16 | // ...
|
17 | //Unterprog 4
|
18 | // ...
|
19 | if(counter == 3)
|
20 | counter = 4;
|
21 | // ...
|
22 |
|
23 | // in Main
|
24 |
|
25 | if(timer > 500) // 500 ms
|
26 | wdt_enable(WDTO_15MS);
|
27 | if(counter == 4) // es wurden alle Unterprogramme korrekt durchlaufen
|
28 | timer = 0;
|
29 | // ISR
|
30 |
|
31 | ISR (Timer 1) // Interrupt im 1ms Takt
|
32 | {
|
33 | timer++;
|
34 | }
|
Das funktioniert recht zuverlässig, doch scheind mir die Programmierung
etwas umständlich.
Ich habe leider nichts gefunden wie man solch einen Watchdog korrekt
programmiert.
Ein kleiner Code wäre nicht schlecht.
Es soll nur erkannt werden ob das Programm noch korrekt läuft.
Danke schon mal
Thomas