www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Variableninhalt nach WDT-Reset


Autor: Jan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Kai G. (runtimeterror)
Datum:

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

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jan (Gast)
Datum:

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

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.