Zugriff auf falsche Adresse im EEPROM

OP #2385686
Lesenswert?
• ▲
▼
Hallo!!

Ich arbeite mit einem AT90PWM316.
WINAVR ist auf dem neuesten Stand und zum programmieren nutze ich 
Eclipse mit dem AVR-Plug-In
Als Compiler verwende ich den gcc.

Ich habe eine Datei eeprom.h, die ich in verschiedenen Sektionen 
unterteil habe:

#define EEMEM __attribute__((section(".eeprom")))
#define EECAL __attribute__((section(".eecal")))

Damit die Ausgabedatei richtig zusammengesetzt wird, und die Sektionen 
an dem von mir gewünschten Platz landen, habe ich folgenden Zeile in das 
Feld für das Erstellen des EEPROM-images eingetragen:

-j .eeprom --no-change-warnings --change-section-lma .eeprom=0 -j .eecal 
--change-section-lma .eecal=0x01F6 -O ihex

.eeprom beginnt ab Adresse 0
.eecal beginnt ab Adresse 0x01F6

Damit die beiden Bereiche nicht unbeabsichtigt in die Flash-Ausgabedatei 
geschrieben werden, sind noch folgenden Einstellungen nötig:

-R .eeprom -R .eecal -O ihex

Somit werden diese beiden Bereiche, welche in der .elf-Datei vorhanden 
sind, nicht in die .hex-Datei geschrieben, sondern nur in die Datei .eep

Im Bereich EEMEM habe ich mehrere Variablen, auf die ich alle problemlos 
zugreifen kann. Es sind jedoch nicht so viele, dass sie in den Bereich 
von .eecal reichen würden.
Im Bereich EECAL habe ich zwei Variablen. Weise ich diesen Variablen 
einen Wert in der Datei eeprom.h zu, so wird dieser Wert auch an die 
richtige Stelle im EEPROM des Controllers geschrieben. Aus der 
Ausgabedatei .eep ist des Weiteren auch ersichtlich, dass sowohl Adresse 
wie auch Wert stimmen.

Versuche ich mit eeprom_read_byte(&eecal_XX) auf eine Variable im 
Bereich .eecal zuzugreifen wird ein falscher Wert zurückgeliefert. Ein 
Schreibbefehl auf diese Adresse hat als Ergebnis, dass im Bereich von 
.eeprom geschrieben wird, jedoch nicht an die gewünschte Adresse im 
Bereich .eecal.

Hatte jemand schon mal ein ähnliches Problem?

Bis jetzt ist mir nur eingefallen die Adressen explizit anzugeben und 
nicht mehr die Variablennamen zu verweden.

Vielen Dank für alle die helfen.
#2385782
Lesenswert?
• ▲
▼
Michael Kaufmann schrieb:
> Versuche ich mit eeprom_read_byte(&eecal_XX) auf eine Variable im
> Bereich .eecal zuzugreifen wird ein falscher Wert zurückgeliefert. Ein
> Schreibbefehl auf diese Adresse hat als Ergebnis, dass im Bereich von
> .eeprom geschrieben wird, jedoch nicht an die gewünschte Adresse im
> Bereich .eecal.

Weil das hier
> --change-section-lma .eecal=0x01F6
keinerlei Einfluss darauf hat, welche Adressen der Linker den Variablen 
gibt. Dem musst du auch noch mitteilen, an welcher Adresse diese Section 
beginnen soll.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.