Forum: Mikrocontroller und Digitale Elektronik Fehlermeldung bei WinARM


von Jansus (Gast)


Lesenswert?

Hallo zusammen!

Ich nutze WinARM für einen LPC2103. Ich verwende angepasste 
Linkerskripte, d.h. ich habe die Skripte eines LPC2106 verwendet und die 
Speichergrößen entsprechend angepasst. Als Startup-Code verwende ich 
den, der bei WinARM dabei war (crt0.s). Wenn ich jetzt den Build-Befehl 
aufrufe, erhalte ich folgende Fehlermeldung, aus der ich leider nicht so 
recht schlau werde:

Linking: Test.elf
arm-elf-gcc -mthumb -mcpu=arm7tdmi-s -mthumb-interwork -I. -gdwarf-2 
-DROM_RUN  -Os -Wall -Wcast-align -Wcast-qual -Wimplicit 
-Wpointer-arith -Wswitch -Wredundant-decls -Wreturn-type -Wshadow 
-Wunused -Wa,-adhlns=crt0.lst  -I./inc -I./conf -MD -MP -MF 
.dep/Test.elf.d crt0.o    Test.o      --output Test.elf -nostartfiles 
-Wl,-Map=Test.map,--cref -lc -lnewlib-lpc -lm -lc -lgcc  -lstdc++ 
-TLPC2103-ROM.ld
c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: 
address 0x600 of Test.elf section .stack is not within region RAM
collect2: ld returned 1 exit status
make.exe: *** [Test.elf] Error 1

> Process Exit Code: 2
> Time Taken: 00:01

Vielleicht kann mir jemand sagen, wo ich den Fehler gemacht habe? Habe 
ich evtl was im Linkerskript vergessen?
Bin für jeden Tipp dankbar!

MFG
Jansus

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Ein fehlerhaftes Linkercontrolscript ist eine gute Vermutung. Wie sieht 
deins aus?

Speziell der Abschnitt MEMORY interessiert und was darin als 
Startadresse (!) für ram bzw. RAM eingetragen ist.

Sowie, ob darin der Abschnitt für .stack in dieser Art vorhanden ist:
http://en.mikrocontroller.net/topic/101678

Es gibt im Netz Linkercontrolscripte ohne den Abschnitt und welche mit 
problematischem Abschnitt, der in Verbindung mit leerem DATA/BSS 
Sektionen ähnliche Fehler produziert:
http://en.mikrocontroller.net/topic/67766

von Jansus (Gast)


Lesenswert?

Hallo!

Super! Vielen, vielen Dank! Es funktioniert!
Werde in Zukunft auch die englischsprachigen Seiten durchforsten.

MFG
Jansus

von Jansus (Gast)


Lesenswert?

... ich vergaß!

.stack ALIGN(256) :
  {
    . = ALIGN(256);        // Diese Zeile hat gefehlt
    . += STACK_SIZE;
    PROVIDE (_stack = .);
  } > RAM

von Jansus (Gast)


Lesenswert?

Ach Mist! Zu früh gefreut!
Hatte die Linkerskripte für den LPC2106 noch drin. Mit denen hat's 
natürlich geklappt.
Habe mal mein Linkerskript angehängt.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Das mit deinem Anhang hat nicht geklappt.
1
.stack ALIGN(256) :
2
  {
3
    . = ALIGN(256);        // Diese Zeile hat gefehlt
4
    . += STACK_SIZE;
5
    PROVIDE (_stack = .);
6
  } > RAM

ist doppelt gemoppelt bzw. enthält einen Rest des alten, problematischen 
Skripts.
1
.stack :
2
  {
3
    . = ALIGN(256);        // Diese Zeile hat gefehlt
4
    . += STACK_SIZE;
5
    PROVIDE (_stack = .);
6
  } > RAM

sollte gehen.

von Jansus (Gast)


Lesenswert?

Oh, Asche auf mein Haupt! Klar, so klappt's! Danke nochmals!

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.