mikrocontroller.net

Forum: Compiler & IDEs ARM + Yagarto


Autor: Alex (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,


ich mache gerade meine mal wieder meine ersten Schritte mit einem EK 
(AT91SAM7X256). Ein Projekt in Eclipse war schnell aufgesetzt, 
Compilieren und Debuggen funktioniert auch prinzipiell (JLink).

Das Problem: Ich hätte gerne C++ Support, welcher eigentlich im Makefile 
auch vorgesehen ist. Wenn man im angehangenen Projekt in der main.cpp 
die Objektinstanziierung mittels new ein- bzw. auskommentiert verursacht 
das einen Unterschied in der Binarygröße der einfach nur falsch sein 
kann (1K vs. 32K).

Bemerkt habe ich das Problem auch erst, als sich der gdb-server von 
Segger (Größenlimitierung in der freien Version) beschwert hat ...

Ich vermute mal, dass entweder in den ld-Files (aus einem Atmel-Projekt 
entnommen) oder dem makefile noch ein Bock ist - ich habe nur keine 
Ahnung wo :(

Vielleicht findet ja einer der Experten mal 2 Minuten, um das Problem 
nachzuvollziehen.

Gruß,
Alex

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe einmal testweise ein "getestetes Projekt" genommen und kann dort 
ebenfalls Probleme produzieren.

Quelle: 
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm...

Der Autor zeigt dort ein Stück Code in dem auch eine Klasse verwendet 
wird, legt man die Klassenobjekte aber nicht statisch sondern auf dem 
Heap an knallt es dort beim Linken.

undefined reference to `operator new(unsigned long)
collect2: ld returned 1 exit status

Lösen lässt sich das, indem man im Makefile die auskommentierte Zeile 
einkommentiert und den C-Compiler-Aufruf zum Linken darüber 
auskommentiert.

%.elf:  $(AOBJARM) $(AOBJ) $(COBJARM) $(COBJ) $(CPPOBJ) $(CPPOBJARM)
  @echo
  @echo $(MSG_LINKING) $@
  $(CC) $(THUMB) $(ALL_CFLAGS) $(AOBJARM) $(AOBJ) $(COBJARM) $(COBJ) 
$(CPPOBJ) $(CPPOBJARM) --output $@ $(LDFLAGS)
#  $(CPP) $(THUMB) $(ALL_CFLAGS) $(AOBJARM) $(AOBJ) $(COBJARM) $(COBJ) 
$(CPPOBJ) $(CPPOBJARM) --output $@ $(LDFLAGS)

Wenn man das macht, dann baut zwar das Projekt, jedoch läuft man dann in 
das im ersten Beitrag geschilderte Problem. Hier zum Vergleich die 
beiden Symboltabellen:

Mit "new" in main:

Creating Symbol Table: main.sym
arm-elf-nm -n main.elf > main.sym

Size after:
main.elf  :
section             size      addr
.text              40132   1048576
.ctors                 8   1088708
.data               2096   2097152
.bss                2128   2099248
.comment            1242         0
.debug_aranges      3056         0
.debug_pubnames     6172         0
.debug_info       142842         0
.debug_abbrev      28859         0
.debug_line        28754         0
.debug_frame        6876         0
.debug_str         18155         0
.debug_loc         39794         0
.ARM.attributes       16         0
.debug_ranges       1992         0
Total             322122


Ohne "new" in main (also Originalprojekt):

Creating Symbol Table: main.sym
arm-elf-nm -n main.elf > main.sym

Size after:
main.elf  :
section             size      addr
.text              17220   1048576
.ctors                 8   1065796
.data               2088   2097152
.bss                  56   2099240
.comment            1206         0
.debug_aranges      2944         0
.debug_pubnames     5951         0
.debug_info       140874         0
.debug_abbrev      28015         0
.debug_line        27996         0
.debug_frame        6692         0
.debug_str         17876         0
.debug_loc         39465         0
.ARM.attributes       16         0
.debug_ranges       1944         0
Total             292351

Irgendwie macht mich das etwas ratlos ...



Alex

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.