Forum: Compiler & IDEs Ein Projekt für LPC2138 mit WinARM compilieren


von Mork (Gast)


Lesenswert?

Hallo,

immer wen nich versuche, ein Beispielprogramm aus dem examples-Ordner 
beim WinARM etwas "umzugestalten" indem ich alle Funktionen wegtue und 
nur noch die main habe, um darauf später eigene Programme aufzubauen, 
kommt beim Compilieren folgende Meldung:
1
> "make.exe" all
2
3
-------- begin --------
4
arm-elf-gcc (GCC) 4.1.1 (WinARM)
5
Copyright (C) 2006 Free Software Foundation, Inc.
6
This is free software; see the source for copying conditions.  There is NO
7
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
8
9
10
Assembling (ARM-only): crt0.S
11
arm-elf-gcc -c -mcpu=arm7tdmi-s -mthumb-interwork -I. -x assembler-with-cpp -DROM_RUN -Wa,-adhlns=crt0.lst,-gdwarf-2 crt0.S -o crt0.o
12
13
Compiling C: main.c
14
arm-elf-gcc -c -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=main.lst  -I./inc -I./conf -MD -MP -MF .dep/main.o.d -Wstrict-prototypes -Wmissing-declarations -Wmissing-prototypes -Wnested-externs  -std=gnu99 main.c -o main.o 
15
16
Linking: main.elf
17
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/main.elf.d crt0.o    main.o      --output main.elf -nostartfiles -Wl,-Map=main.map,--cref -lc -lnewlib-lpc -lm -lc -lgcc  -lstdc++ -TLPC2138-ROM.ld
18
c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: address 0x600 of main.elf section .stack is not within region RAM
19
collect2: ld returned 1 exit status
20
make.exe: *** [main.elf] Error 1
21
22
> Process Exit Code: 2
23
> Time Taken: 00:01

Was mache ich da falsch???

MfG Mark

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Schwierig...

Du könntest das modifizierte Projekt zum Nachvollziehen archivieren und 
hier anhängen.

Ansonsten habe ich nur eine Mutmaßung parat - es gab mal Probleme 
Adressen per Linkercontrolscript (hier: LPC2138-ROM.ld) zu berechnen, 
wenn es leere DATA und BSS Sektionen gab. Um das auszuschliessen, 
könntest du wenigstens ein paar Dummyvariablen (int foo_data = 42; int 
bar_bss;) in main.c drin lassen.

von Mark .. (mork)


Angehängte Dateien:

Lesenswert?

Hallo Stefan,

im Anhang ist das Archiv. Ich habe die zwei Variablen da reingefügt und 
es hat komischerweise funktioniert. Nur wieso??? Ich bin im Thema ARM 
ein ziemlicher Anfänger, ist es normal dass man da sinnlose Variablen 
einfügen muss damit es gelinkt werden kann?? Und was ist überhaupt die 
ROM.ld?

MfG Mark

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Ok. Gut dass der Grund gefunden ist, jetzt suche ich auch die Ursache 
bzw. die damalige Diskussion raus...

http://en.mikrocontroller.net/topic/67766#86092

Das dort angesprochene Readme liest sich so:
"- It seems that the linker does not provide a correct "." if the 
section before is empty and the current section is aligned in the 
section "header". I'm not sure why - maybe a new feature or a bug in the 
binutils. In the "blinkswitch" examples for LPC2106 und LPC2129 I've 
somehow fixed this and verified the correct result by the values given 
in the map-file.
  In the linker-script for ROM
    .stack ALIGN(256) :
    {
    ...
  has been replaced with:
    .stack :
    {
      . = ALIGN(256);
"

Siehe auch modifizierte Beispiele

A blink-switch-example for the Philips LPC2129. Code prepared for a 
Olimex LPC-P2129 demo-board(*1)  but can be adapted to other hardware 
easily. Tested with WinARM 4/05. [Download] (Timestamp 20070319, fixed 
stack-align in linker-scripts)

A similar example for the Philips LPC2129. Demonstrates timer-irq, VIC, 
thumb-interwork, linker-scripts, startup-code etc. Code prepared for the 
Olimex LPC-P2129 Rev A demo-board(*1) but can be adapted to other 
hardware easily. Tested with WinARM 4/05. [Download] (Timestamp 
20070319, fixed stack-align in linker-scritps)

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Die *.ld Dateien sind sog. Linkercontrolscripts.

Das sind strukturierte Textdateien, die dem Linker beschreiben, wie das 
Speicherlayout des Target-µC aussieht bzw. aussehen soll und wo Code und 
Daten und Stack platziert werden sollen.

Grob:

RAM.ld sagt dem Linker alles so linken, dass es im RAM des µC steht.

ROM.ld sagt dem Linker alles so linken, dass das ROM für den Code und 
initialisierte Daten (Ur-DATA) benutzt wird und das RAM für Variablen 
(DATA, BSS) sowie Stack.

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.