www.mikrocontroller.net

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


Autor: Karl-Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl-Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl-Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.