PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zustand von SRAM nach Reset



bombatz
07.06.2007, 08:39
Hallo,

was passiert eigendlich mit den Daten im SRAM bzw. in den General Purpose Registern (also R0...R31) wenn ein Softreset (z.B. watchdog Reset) stattfindet?

Wenn ich die Spannung unterbreche, dann ist es klar, dann sind die Daten weg, der SRAM ist ja schließlich flüchtig. Aber bei einem watchdog Reset müssten die Daten doch eigendlich erhalten bleiben, weil die Spannung ja nicht abgeschaltet wird. :-k

Leider habe ich dazu nix im Datenblatt gefunden. Da ist nur angegeben, dass die IO-Register auf die Initialwerte zurückgesetzt werden. Von dem restlichen SRAM steht da leider nix.

Hier im Forum habe ich dazu unterschiedliche Meinungen gefunden, die einen sagen, die Daten bleiben in so einem Falle erhalten, die anderen sagen dass der SRAM undefinierte Zustände einnimmt.

Kann mir jemand weiterhelfen?

Hubert.G
07.06.2007, 09:47
Willst du mit den SRAM-Daten weiterarbeiten, woher weißt du wo was steht, relevante Daten wie IO und Stack werden zurückgesetzt.
Hubert

bombatz
07.06.2007, 10:04
Ich möchte in einem Programm eine Art Laufzeitmessung laufen lassen und die aktuelle Zeit ist bei mir dann im SRAM abgelegt bzw. in einem der Arbeitsregister. Und diese Zeit soll nicht bei einem watchdog Reset wieder bei null beginnen, darum wäre es ja von Vorteil wenn diese daten dann noch vorhanden sind.


woher weißt du wo was steht
na ich weiß ja wohin ich das vorher gespeichert habe ;)


relevante Daten wie IO und Stack werden zurückgesetzt
das steht ja glücklicherweise auch im Datenblatt
leider schweigt dass datenblatt was mit den Daten im RAM passiert

notfalls müsste ich die Daten im EEPROM ablegen, der Zugriff dauert aber im Vergleich zum RAM viel zu lange

uwegw
07.06.2007, 10:12
Zumindestens die Multifunktionsregister werden vom Watchdog nicht plattgemacht. Daher kann man auch mit 7 Befehlen einen 1-Sekunden-Blinker programmieren: https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=18714

Das ist im Datenblatt nicht explzit angegeben. Ich könnte mir denken, dass es beim SRAM ähnlich ist. Einfach mal ausprobieren!

Hubert.G
07.06.2007, 10:18
Mit den Daten passiert nichts, warum auch, wer oder was sollte etwas damit tun solange du den Strom nicht abschaltest. Bist du dir nur sicher das das Prog beim Neustart dir auf diese Stelle nicht etwas hinschreibt, der Platz ist ja nicht als belegt gekennzeichnet.

Hubert

uwegw
07.06.2007, 10:32
Bist du dir nur sicher das das Prog beim Neustart dir auf diese Stelle nicht etwas hinschreibt, der Platz ist ja nicht als belegt gekennzeichnet.
In ASM ist das kein Problem, und in anderen Sprachen gibt es meist die Möglichkeit, Variablen als nicht automatisch initalisiert anzulegen.

uwegw
07.06.2007, 10:35
Bist du dir nur sicher das das Prog beim Neustart dir auf diese Stelle nicht etwas hinschreibt, der Platz ist ja nicht als belegt gekennzeichnet.
In ASM ist das kein Problem, und in anderen Sprachen gibt es meist die Möglichkeit, Variablen als nicht automatisch initalisiert anzulegen.
In avr-gcc wäre es zb "unsigned int nicht_initaliserte_variable __attribute__ ((section (".noinit")));"
Und um nach dem ersten Start definierte Startwerte zu schreiben, checkt man einfach, was den letzen Reset ausgelöst hat: wars der Watchdog, nichts tun, wars nen power-on, dann initialiseren.

bombatz
07.06.2007, 10:37
das mit dem watchdog-Blinker is ne ganz interessante Sache... schöne Idee
dann dürfte das mit dem RAM ja eigendlich auch funktionieren, schließlich sind die Arbeitregister ja auch nur ein Teil des RAMs
werd ich wohl mal nen Versuch machen müssten


Bist du dir nur sicher das das Prog beim Neustart dir auf diese Stelle nicht etwas hinschreibt, der Platz ist ja nicht als belegt gekennzeichnet.
ich programmiere in Assembler, dann dürfte es eigendlich nicht passieren, dass etwas in den RAM gelegt wird, bevor ich nicht ausdrücklich den Befehl dafür gebe... könnte höchstens in 'C' problematisch werden

[edit]: ups... da war uwegw schneller mit der Assembler Erklärung O:)

bombatz
07.06.2007, 10:40
Und um nach dem ersten Start definierte Startwerte zu schreiben, checkt man einfach, was den letzen Reset ausgelöst hat: wars der Watchdog, nichts tun, wars nen power-on, dann initialiseren.
genau so hab ich mir das auch vorgestellt