Forum: Compiler & IDEs libgcc.a für cortex-M0 und cortex-M3


von Schaulus Tiger (Gast)


Lesenswert?

hallo,

wie sagt man dem Linker, welche Architektur mit "-lgcc" gemeint ist? Der 
arm-none-eabi-gcc bringt ja diverse libgcc.a für armv6-m, armv7-m usw. 
mit. Und mit "-mcpu" erzeugt der Compiler auch passenden Code. Nur der 
Linker baut immer eine falsche lib ein.

Als Notlösung funktioniert
1
-lgcc -L/usr/lib/gcc/arm-none-eabi/4.8/armv6-m/
Aber das kann's ja nicht sein, vor allem weil es von der gcc-Version 
abhängt. Eine lokale Kopie der lib in meinem Programmverzeichnis hätte 
das gleiche Problem. Ich könnte die gcc-Installation manipulieren, aber 
ich will gleichzeitig für M0 und M3 übersetzen.

Außer meinem Makefile gibt es hier nur die Debian-Pakete 
binutils-arm-none-eabi 2.24.51.20140604-3+5 und gcc-arm-none-eabi 
4.8.3-9+11. Ich kann also nicht einmal einer IDE die Schuld geben ;)

Oder soll ich die M0-Chips auslöten und durch M4 ersetzen? Sind ja nur 
10 LQFP-32.

von Dr. Sommer (Gast)


Lesenswert?

Mit "-mcpu=cortex-m4" oder eben "-mcpu=cortex-m0"

von Schaulus Tiger (Gast)


Lesenswert?

Leider nicht.
> mit "-mcpu" erzeugt der Compiler auch passenden Code.
> Nur der Linker baut immer eine falsche lib ein.

von Dr. Sommer (Gast)


Lesenswert?

Du sollst -mcpu ja auch dem Linker übergeben, nicht nur dem Compiler.

von Schaulus Tiger (Gast)


Angehängte Dateien:

Lesenswert?

es will einfach nicht; ich häng hier mal das Makefile an...

von hp-freund (Gast)


Lesenswert?

Ich sehe 3 Unterschiede zu meinem Makefile.

1. meine LDFLAGS haben nur den Eintrag:
LDFLAGS = -Wl,--gc-sections -Wl,-Map=$(PROJ_NAME).map

2. meine CFLAGS haben zusätzlich die CPU Angabe, deine wäre:
-DSTM32F051

3. für die elf Datei (linker) nehme ich LDFLAGS und CFLAGS:
$(CC) $(CFLAGS) $(LDFLAGS) ...

von Schaulus Tiger (Gast)


Lesenswert?

hp-freund schrieb:

> Ich sehe 3 Unterschiede zu meinem Makefile.
Adlerauge!

> 1. meine LDFLAGS haben nur den Eintrag:
> LDFLAGS = -Wl,--gc-sections -Wl,-Map=$(PROJ_NAME).map

"-Wl,-T$(LDSCRIPT)" brauche ich doch für mein Linker Script und mit 
BUILD_TIME definiere ich ja nur eine Konstante, so eine Art automatische 
Versionnummer

> 2. meine CFLAGS haben zusätzlich die CPU Angabe, deine wäre:
> -DSTM32F051

wenn das ein Problem wäre, würde ja der Compiler meckern

> 3. für die elf Datei (linker) nehme ich LDFLAGS und CFLAGS:
> $(CC) $(CFLAGS) $(LDFLAGS) ...

aber das war's, mit den CFLAGS kommt das -mcpu mit und schon geht's.
Herzlichen Dank! Du hast 10 unschuldige STM32F051K6 gerettet :)

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.