Forum: Compiler & IDEs ARM + Yagarto


von Alex (Gast)


Angehängte Dateien:

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

von Alex (Gast)


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_projects/index_at91.html#at91_cpp

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

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.