Mal eine Frage zum Linker Script für die AVR51-Gruppe:
In der MEMORY-Section wird folgendes definiert (exemplarisch aus dem
avr51.xn-Linker Script):
1 | MEMORY
|
2 | {
|
3 | text (rx) : ORIGIN = 0, LENGTH = 128K
|
4 | data (rw!x) : ORIGIN = 0x800100, LENGTH = 0xff00
|
5 | eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 64K
|
6 | fuse (rw!x) : ORIGIN = 0x820000, LENGTH = 1K
|
7 | lock (rw!x) : ORIGIN = 0x830000, LENGTH = 1K
|
8 | signature (rw!x) : ORIGIN = 0x840000, LENGTH = 1K
|
9 | }
|
Für meinen ATMega128RFA1 stimmt alles, bis auf .data. Das Datenblatt
sagt, der Datenbereich soll ab 0x800200 starten (was er beim Linken auch
macht, da bei den GCC-Optionen u.a. automatisch (?) "-Tdata 0x800200"
gesetzt wird). Aber die angebene Größe stimmt natürlich nicht, 0xFF00
wären 65280 Bytes, also 256 kleiner als 64K (wohl wegen Startadresse
0x800100 und den dort benötigten 0x100 für SFR, die aber beim
ATMega128RFA1 sogar 0x200 ausmachen und damit müsste LENGTH 0xFE00 =
0x10000 - 0x200 (65024 = 64K - 512) sein, gäbe es überhaupt 64K RAM.
Und damit komme ich zum Kern meiner Frage, die ich mir auch nach
Durchsicht des Listings und der Scripts nicht selbst beantworten konnte:
Wird die Größe des Speichers, ähnlich wie auch -Tdata 0x800200 bei Wahl
von -mmcu=atmega128rfa1 korrekt festgesetzt, obwohl im Linker Script
annähernd 64K angegeben werden? Der ATMega128RFA1 hat nämlich "nur" 16K
RAM (Edit: von 0x800200 bis 0x8041FF)! Wo liegt der Stack und wie groß
ist er? (Edit: bis 0x8041FF, aber wie groß? Vermutlich bis zum
Heap-Start?)
Im Beitrag ""-mmcu="-Parameter bei AVR-GCC?" schreibt Autor Johann L.
(gjlayde) am 12.02.2009 16:58 folgendes über den Effekt des Setzens von
-mmcu:
> Intern richtet avr-gcc die Codeerzeugung nach den Fähigkeiten des
> Targets aus, die sich zB an den oben beschriebenen Eigenschaften
> orientieren.
Daraus würde ich annehmen (und auch daraus, dass hier keine Probleme
dazu im Forum vermerkt waren), dass die Angabe von LENGTH irrelevant ist
und vom Compiler/Linker automatisch für die mit -mmcu angegebene CPU
angepasst wird???