ATMega128: Section DATA ins externe RAM

Gast #345515
Lesenswert?
• ▲
▼
Hallo,

ich moechte gerne das Segment DATA ins externe RAM legen.
Dazu uebergebe ich dem Compiler die Linker-Option -Wl,data=0x801100
Das ganze laesst sich auch compilieren und linken, jedoch liegt DATA
weiterhin auf 0x800100 (internes RAM).
Kann mir jemand sagen, was ich falsch gemacht habe?

Gruss,
Stefan
Gast #345516
Lesenswert?
• ▲
▼
Sorry,

ich hab' ganz vergessen Euch mitzuteilen, dass ich ich mit dem GNU
AVR-GCC V3.4.5 arbeite und die LDFLAGS fuer den Linker im zugehoerigen
Makefile mit obiger Option erweitert habe:

override LDFLAGS = -Wl,-Map,$(PRG).map
-Wl,--section-start=.EXUART=0x808000 -Wl,-Tdata,0x801100

Die andere Sache mit meinem externen UART am externen Datenbus an
Adresse 0x8000 hat der Linker korrekt ausgefuehrt, d.h das Segment
wurde angelegt.

Gruss,
Stefan
Gast #345517
Lesenswert?
• ▲
▼
Ich würde für die .data section nicht über die Linker-Option gehen,
sondern über das Linker-Skript und den Startup-Code.

Dazu muss dein Linker Control Script (*.ld) wissen, dass es ein
externes RAM gibt (=> MEMORY-Definition) und dein Startup-Code, dass
DATA dorthin statt ins SRAM kopiert werden muss. Der externe RAM muss
zu dem Zeitpunkt der Kopieraktion natürlich schon betriebsfähig sein...
Gast #345518
Lesenswert?
• ▲
▼
Hallo Stefan,

danke fuer den Hinweis!

Hab' ich gleich umgesetzt und funktioniert auch, wenn ich folgenden
Umweg gehe und die urspruengliche section DATA in Exram_data
umbenenne:

Memory:
exram  (rw!x) : ORIGIN = 0x801100, LENGTH = 0xEF00

Sections:
.exram_data 0x801100 : /* AT (ADDR (.exram) + SIZEOF (.exram)) */
  {
     PROVIDE (__data_start = .) ;
    *(.data)
    *(.gnu.linkonce.d*)
    . = ALIGN(2);
     _edata = . ;
     PROVIDE (__data_end = .) ;
  }  > exram

Leider war es mir jedoch nicht moeglich, die urspruengliche section
.data auf Startadresse 0x801100 zu legen. Selbst das Erzwingen im
Linker Script ueber die Eintraege:

Memory-Bereich:
data   (rw!x) : ORIGIN = 0x801100, LENGTH = 0xEF00

Section-Bereich:
.data 0x801100 :
{ usw. } > exram

bring nichts und der Linker meldet mir, dass .data nicht im Bereich
exram liegt. Selbst wenn ich die Section .data im Linker Script
loesche, so ist wird sie nach wie vor auf die Startadresse 0x800100
abgebildet.
Kann mir jemand sagen, wer oder was hier seine Haende im Spiel hat?

Gruss,
Stefan
Gast #345519
Lesenswert?
• ▲
▼
Nur eine Vermutung:

Mache einen Make-Lauf mit der höchsten Verbose/Log-Stufe. Das gibt zwar
viel Output, aber hier sollte sich zeigen, ob in einer Kommandozeile vom
configure des AVR-GCC mit dem Atmega128-Target her entsprechende
Optionen voreingestellt sind.
Gast #345521
Lesenswert?
• ▲
▼
Genauso ist es!
AVR-GCC legt den DATA-Bereich automatisch an 0x800100. So sieht die
entsprechende Kommandozeile aus:

C:/WinAVR/bin/../lib/gcc/avr/3.4.5/../../../../avr/bin/ld.exe -m avr5
-Tdata 0x800100 -o Myfile.elf
C:/WinAVR/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtcan128.o
-LC:/WinAVR/lib/gcc/avr/3.4.5/avr5
-LC:/WinAVR/lib/gcc/avr/3.4.5
-LC:/WinAVR/lib/gcc
-Lc:/WinAVR/lib/gcc/avr/3.4.5/avr5
-Lc:/WinAVR/lib/gcc/avr/3.4.5
-LC:/WinAVR/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5
-LC:/WinAVR/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib
-Lc:/WinAVR/lib/gcc/avr/3.4.5/../../../../avr/lib/avr5
-Lc:/WinAVR/lib/gcc/avr/3.4.5/../../../../avr/lib
-Map Myfile.map
-Tlnk_cmd.x Myfile.o AVR_startup.o -lgcc -lc -lgcc

Leider ist es mir auch mit 'nem Hex-Editor nicht gelungen, dem AVR-GCC
diese Flausen auszutreiben. So muss man wohl mit diesem kleinen Uebel
leben.
Das System funktioniert, was das Wichtigste ist.

Stefan, ich danke Dir vielmals fuer deine Unterstuetzung!!!

Gruss,
Stefan Kellermann

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.