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
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
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...
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
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.
Add: Die entsprechende GCC Option ist -v (mit Ausführung) bzw. -### (nur Kommendozeilen anzeigen, nicht ausführen)
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
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.