Symbole für Adressen im externen EEPROM

#1657326
Lesenswert?

Aus einem Makefile extrahiert
1
...
2
  --change-section-address .data-0x800000 \
3
  --change-section-address .bss-0x800000 \
4
  --change-section-address .noinit-0x800000 \
5
  --change-section-address .eeprom-0x810000 
6
...
Es ist also alles jenseits von 0x810000 verfügbar.

Vorschlag: 0x820000

Werner

Edit: Ich sehe gerade dass bis 840000 belegt ist, also 0x850000,
oder gleich 0xA00000.

;)
Gast #1657590
Lesenswert?

Hallo Werner, danke fuer deine Hilfe!
Was ich an der Sache nicht verstehe: wie wird in diesem Fall denn aus 
einer Variable die Adresse 0? Also, in welchem Speicher ist die section 
0xA00000 und was steht an dieser Adresse? Wuerde mich freuen, wenn du 
mir mit einer Erklaerung den Linker etwas naeherbringen koenntest :-)
#1657999
Lesenswert?

Ist im Link aus dem zweiten Beitrag erklärt.

Ein Pointer ist beim AVR 16 Bit, kann also Werte von 0x0000 bis 0xFFFF 
annehmen. Der Compiler/Linker verwendet längere (vermute mal 32 oder 64 
Bit). Hier werden 24 Bit benötigt (0xA00000). Durch den avr-objcopy wird 
dieser Bereich aus dem erzeugten elf-Binärfile extrahiert und 
(üblicherweise) in ein hex File umgewandelt. Da hierbei nur 16 Bit 
Adressen benötigt werden (bzw. verwendet werden können), werden die 
überzähligen Bits einfach abgeschnitten.


Original:  uint32_t orgptr = 0xA01234;
Ziel:      uint16_t targptr = orgptr;   // Ergebnis = 0x1234;

Automagically ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren