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