Forum: Compiler & IDEs WinAVR: Datem im EEPROM an bestimmte Stelle aber auch ins .eep


von Karl-Heinz (Gast)


Lesenswert?

Hallo,

ich möchte das EEPROM quasi in zwei Bereiche teilen.
Einen Bereich, der per Bootloader (über-)schrieben werden kann,
und einen Bereich, der quasi ein Flashen "überlebt".

Memory-Sections denke ich grundsätzlich zu kennen.

Beispiel: 4KByte EEPROM, die untersten 2KByte sollen updatebar sein,
die oberen nicht.

Mein Problem ist:

Nenne ich die neue Section z.B. .eepromcal und weise Ihr
in den Project-Settings die Adresse 0x800 zu, ignoriert der Linker
die Adresse und packt die Section direkt hinter .eeprom.

Wennn der Name der neuen Section nicht mit "eeprom" beginnt,
stehen die Daten zwar ab der gewünschten Adrssse, aber nicht im 
.eep-File.
Der Linker gibt anscheinend nur Segmente, die mit "eeprom" beginnen
ins .eep-File aus.
Zum erstmaligen Flashen und während der Entwicklung brauche ich sie
aber im Hexfile fürs EEPROM.

Hat jemand Abhilfe?

Grüsse
Karl-Heinz

von Karl-Heinz (Gast)


Lesenswert?

Nachtrag:

Am liebsten wäre mir natürlich eine Lösung, bei der ich weiterhin
das Erstellen des Makefiles, etc. WinAVR überlassen könnte.

von Stefan E. (sternst)


Lesenswert?

Das ist keine Problem des Linkers, sondern vom AVR-Studio. Diese 
"Sections-Sachen" sind dort etwas halbherzig implementiert. Man kann 
zwar in den Project-Options Sections angeben mit Adresse und 
Speichertyp, aber das automatisch generierte Makefile bleibt z.B. 
bezüglich der hex- und eep-File Erzeugung unverändert.

Es wäre das Beste, wenn du dem AVR-Studio die Kontrolle darüber 
entziehst und ein eigenes Makefile benutzt.

von Karl-Heinz (Gast)


Lesenswert?

Hallo,

wenn ich eine neue Section in den Project Settings definiere,
deren Name mit .eeprom beginnt, dann stehen IMHO
schon die richtigen Sachen im Makefile.
Nur der Linker bzw. avr-objcopy scheinen sich nicht drum zu kümmern.

Bsp:
AT90CAN128
In den Project Settings eine zweite Section .eepromcal
auf die EEPROM-Adresse 0x0800 (obere Hälfte des EEPROMs) gelegt.

Dann findet sich im Makefile in den Options für avr-objcopy
auch IMHO richtig:
HEX_EEPROM_FLAGS += --change-section-lma .eepromcal=0x800

Und der Linker bekommt auch als Option:
LDFLAGS += -Wl,-section-start=.eepromcal=0x810800

Nur trotzdem legt der Linker die Section .eepromcal direkt
hinter das Ende von .eeprom statt an 0x810800
Sprich alle Variablen in .eepromcal beginnen direkt hinter den
(paar wenigen) in .eeprom, statt erst ab 0x800.

Gruß
Karl-Heinz

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
Noch kein Account? Hier anmelden.