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.
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.
Guter Einwand. Kannst Du mir sagen wo ich die entsprechenden Einstellungen machen kann?
Michael Kaufmann schrieb: > Kannst Du mir sagen wo ich die entsprechenden Einstellungen machen kann? Nein. Aber es gibt bestimmt irgendwo die Möglichkeit, zusätzliche Optionen für den Linker anzugeben. PS: Oder sollte das "wo" eigentlich ein "wie" sein? -Wl,--section-start=.eecal=0x8101f6
Vielen Dank für die Hilfe. Die letzte Antwort war der Hinweis der mir gefehlt hat. Ich hab nun auch in Eclipse die passende Stelle gefunden um das Argument einzugeben.
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.