Hallo, ich suche nach einer Möglichkeit eine Variable (2 Bit reichen) vor einem WDT-Reset zu schreiben und nach einem WDT-Reset auszulesen. Diese soll jedoch nicht im Flash gespeichert werden. Leider sieht es so aus, als würde der WDT-Reset den RAM leeren und ich finde keine Möglichkeit diesen Vorgang zu umgehen, denn dann könnte ich sie an eine feste Adresse schreiben und nach dem Reset eben von dort lesen. Hat jemand eine Idee? (Mikrocontroller: Uc3c0512c) Viele Grüße Gert
Hallo,
erstmal vielen Dank für die schnellen Antworten.
Die Software-lösung ist für mich komfortabler.
Nur war in meinem Linker-Script die "noinit" Sektion nicht definiert.
Also habe ich (unter Zuhilfenahme der Forenbeiträge und der appnote
doc32158.pdf von atmel) folgende noinit sektion definiert.
1. .noinit (NOLOAD):
2. {
3. PROVIDE (__noinit_start = .) ;
4. *(.noinit*)
5. PROVIDE (__noinit_end = .) ;
6. } > bss
Erklärung:
1. Zeile: -Die Sektion heisst noinit. Man kann sie auch anders nennen
nur muss man dann nachher die Variable im C-Code anders deklarieren.
Bei mir sieht das dann so aus:
uint8_t variablennamenachwahl _attribute_ ((section (".noinit")));
- Das NOLOAD attribute ist dafür zuständig, dass der Speicherbereic
nicht bei einem Reset (zumindest bei einem Software-Reset) gelöscht
wird.
3. Zeile - 5. Zeile: Habe ich aus einem Forenbeitrag rauskopiert. Ich
bin mir nicht sicher was da abläuft, aber es scheint zu funktionieren.
6. Zeile: da ich die .noinit Sektion in den SRAM hinter die bss sektion
legen will, gebe ich das hier einfach an mit dem größer-zeichen an.
Im Anhang die komplette lds-File meines Uc3c0512c. Die letze Sektion ist
die, die ich angelegt habe.
Velen Dank für die Hilfe und viele Grüße
Gert
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.