Hallo Hab das folgende Beispiel auf Mikrokontroller gefunden:
1 | uint8_t x;
|
2 | x = 10;
|
3 | while (x >= 0)
|
4 | {
|
5 | // tu was
|
6 | x--;
|
7 | }
|
"Wenn wir die Schleife mal genau anschauen sollte uns auffallen, dass
dieselbe niemals beendet wird. Warum nicht? Ganz einfach, weil eine als
unsigned deklarierte Variable niemals kleiner als Null werden kann (der
Compiler sollte jedoch eine ensprechende Warnung ausgeben). Das Programm
wird also ewig diese Schleife durchlaufen. Und hier genau kommt der
Watchdog zum Zug."
Wenn ich das richtig verstanden habe kann uint8 nicht kleiner als 0
werden kann, im Gegensatz zu int8, was von - bis 1+ geht. Soweit klar.
Kennt jemand noch ein anderes Beispiel dazu?
Dann habe ich das gefunden, da steht "asm". Sorry das versteh ich nicht
Die Einrichtung des Watchdog Timers läuft nach dem folgenden Schema:
• cli() schaltet alle Interrupts ab. Das ist notwendig, da die
Einrichtung des Watchdog Timers gestört werden könnte
• asm("WDR"); ist eine Assembler Anweisung für den Watchdog Reset; wir
werden bald sehen, wie man eine weniger kryptische Funktion einsetzen
kann.
• WDTCSR |= (1<<WDCE) | (1<<WDE); leitet die Änderung der Watchdog
Parameter ein. Es ist wichtig, dass „|=“ und nicht „=“ verwendet wird.
Nach dieser Initialisierung muss die eigentliche Änderung innerhalb der
nächsten 4 Taktzyklen erfolgen.
• WDTCSR = (1<<WDE) | (1<<WDP3); bedeutet: Reset ist aktiviert und der
Watchdog Timer ist auf vier Sekunden eingestellt (siehe
Einstellungstabelle).
• sei(); lässt Interrupts wieder zu.
Arbeite mit C auf dem Atm328. Ist den asm dazu nötig oder geht es auch
einfacher?
LG Peter