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
Nachtrag: Am liebsten wäre mir natürlich eine Lösung, bei der ich weiterhin das Erstellen des Makefiles, etc. WinAVR überlassen könnte.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.