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.