Willst du mit den SRAM-Daten weiterarbeiten, woher weißt du wo was steht, relevante Daten wie IO und Stack werden zurückgesetzt.
Hubert
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.
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?
Willst du mit den SRAM-Daten weiterarbeiten, woher weißt du wo was steht, relevante Daten wie IO und Stack werden zurückgesetzt.
Hubert
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.
na ich weiß ja wohin ich das vorher gespeichert habewoher weißt du wo was steht
das steht ja glücklicherweise auch im Datenblattrelevante Daten wie IO und Stack werden zurückgesetzt
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
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/ze...ag.php?t=18714
Das ist im Datenblatt nicht explzit angegeben. Ich könnte mir denken, dass es beim SRAM ähnlich ist. Einfach mal ausprobieren!
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
In ASM ist das kein Problem, und in anderen Sprachen gibt es meist die Möglichkeit, Variablen als nicht automatisch initalisiert anzulegen.Zitat von Hubert.G
In ASM ist das kein Problem, und in anderen Sprachen gibt es meist die Möglichkeit, Variablen als nicht automatisch initalisiert anzulegen.Zitat von Hubert.G
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.
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
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 werdenBist du dir nur sicher das das Prog beim Neustart dir auf diese Stelle nicht etwas hinschreibt, der Platz ist ja nicht als belegt gekennzeichnet.
[edit]: ups... da war uwegw schneller mit der Assembler Erklärung
genau so hab ich mir das auch vorgestelltUnd 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.
Lesezeichen