Forum: Compiler & IDEs AVR51 Linker Script


von Volker T. (funker211)


Lesenswert?

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???

: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.