mikrocontroller.net

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


Autor: Mork (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
> "make.exe" all

-------- begin --------
arm-elf-gcc (GCC) 4.1.1 (WinARM)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Assembling (ARM-only): crt0.S
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

Compiling C: main.c
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 

Linking: main.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/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
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
collect2: ld returned 1 exit status
make.exe: *** [main.elf] Error 1

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

Was mache ich da falsch???

MfG Mark

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mark .. (mork)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.