Forum: Mikrocontroller und Digitale Elektronik Variableninhalt nach WDT-Reset


von Jan (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe da mal eine Frage bezüglich Variablen nach einem WDT-Reset. Ist 
es möglich diese nach dem Reset mit dem vorigen Wert weiter zu 
verwenden?
Konkret möchte ich nach einem Reset mit den selben Einstellungen in 
meinem Programm weiter arbeiten.

Ich habe mal versucht das ganze mit einem kleinen Testprogramm 
auszuprobieren, es hat leider nicht funktioniert. Eine Zählveriable 
sollte manuell verändert werden können und nach einem WDT-Reset ihren 
Wert behalten. Wenn ich die Variable jedoch nur in der Schleidfe 
if(!(MCUCSR&8)) deklariere motzt der Compiler.
Mein Testprogramm habe ich mal angehängt.
Die Befehle initDisplay, wert- und textSenden beziehen sich auf ein 
angeschlossenes LCD.

Wäre schön wenn jemand mit der Problematik schon ein paar Erfahrungen 
sammeln konnte und mir evtl weiter helfen kann.

Schönes WE an alle ;)

Jan

von Kai G. (runtimeterror)


Lesenswert?

Hmm... wie sollte das gehen? Reset ist Reset - egal warum. Und nach 
einem Reset ist der Inhalt des SRAMs undefiniert oder mit einem festen 
Zeichen vorinitialisiert (hab's Datenblatt gerade nicht parat).

Du kannst lediglich die Ursache für den Reset ermitteln und danach 
entsprechend den Benutzer informieren.

Zudem sehe ich keinen Grund dafür, dass der Controller nach dem Reset 
(der ja durch einen Fehler ausgelöst wurde) so tun soll, als ob nichts 
passiert sei. Dann kannst du den Watchdog auch direkt ausschalten - das 
hätte denselben Effekt.

von Spess53 (Gast)


Lesenswert?

Hi

Die Initialsierung der Variablen wird beim Programmstart durch die 
Software durchgeführt. Das ist bei einem Power-On-Reset natürlich 
sinnvoll. Nach einem Watchdog-Reset sind Registerinhalte und Ram erst 
einmal unverändert, werden aber überschrieben, wenn der Reset wie ein 
normaler Reset behandelt wird (s.o.). Im MCUSR kann die Ursache des 
Resets festgestellt werden. Wenn du das WDRF-Bit beim Programmstart 
auswertest kannst du die normale Initialisierung umgehen und auf einen 
Watchdogreset reagieren.

MfG Spess

von Kai G. (runtimeterror)


Lesenswert?

Oh, das war mir neu! Dann nehme ich einen Teil zurück und schau mir das 
nochmal an.

von Thorsten (Gast)


Lesenswert?

Hi,

ist problemlos möglich, z.B. unter C (GCC) __attribute__((noinit)). Dann 
wird die Variable nicht vom Startupcode initialisiert. Musst Du dann 
selber im Falle eines PowerOn-Resets selber initialisieren. Bein 
WD-Reset dann eben nicht.

Gruss

von Jan (Gast)


Lesenswert?

Danke für eure Antworten, werde dann mal wieder etwas rumspielen. ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.