STM32 : Float linken mit Coocox

OP #3086222
Lesenswert?

Hallo,
ich versuche, float Zahlen mit einem stm32f107rc und der Cooide 1.7.0 
und winarm 4.6.q4 auszugeben.

Leider klappt das nicht, es kommt nur Müll raus. Welche Libs muss ich 
dazulinken und aus welchem Pfad?
Oder erkennt das die IDE automatisch? Bei Atmel war auch Handarbeit 
notwendig...

Hier der Compile-Aufruf:
-mcpu=cortex-m3; -mthumb; -Wall; -ffunction-sections; -g; -Os; 
-mfloat-abi=soft; -DSTM32F107RC; -DSTM32F10X_CL; -I.;

Und der Linker:
-mcpu=cortex-m3; -mthumb; -g; -nostartfiles; -Map=led_blink.map; -Os; 
--gc-sections; -Lc:\program files (x86)\gnu tools arm embedded\4.6 
2012q4\arm-none-eabi\lib\; -lm; -L${linkdir}; 
-T${linkdir}/arm-gcc-link.ld;

Toolchain Path liegt auf: C:\Program Files (x86)\GNU Tools ARM 
Embedded\4.6 2012q4\bin

Irgendwas ist da faul.
OP #3087004
Lesenswert?

Coocox sagt folgendes:

"In project -> configuration click on the “Add” of the “linked 
libraries” box and put there a single m (Yes, a f&@^# single letter, an 
“m” without quotes)"

Allerdings kann ich da kein "m" eingeben, sondern es wird ein Pfad zu 
einer Lib gefordert. Nun sind in dem GCCARM Paket sehr viele "libm.a" 
enthalten.

Welche muss ich einbinden?
OP #3088632
Lesenswert?

Ich habe folgende libs gefunden, das mit der fpu/lib.a werde ich mal 
probieren:
1
C:\Program Files (x86)\GNU Tools ARM Embedded\4.6 2012q4\arm-none-eabi\lib\libm.a
2
C:\Program Files (x86)\GNU Tools ARM Embedded\4.6 2012q4\arm-none-eabi\lib\armv6-m\libm.a
3
C:\Program Files (x86)\GNU Tools ARM Embedded\4.6 2012q4\arm-none-eabi\lib\armv7-m\libm.a
4
C:\Program Files (x86)\GNU Tools ARM Embedded\4.6 2012q4\arm-none-eabi\lib\armv7-r\thumb\libm.a
5
C:\Program Files (x86)\GNU Tools ARM Embedded\4.6 2012q4\arm-none-eabi\lib\armv7-r\thumb\fpu\libm.a
6
C:\Program Files (x86)\GNU Tools ARM Embedded\4.6 2012q4\arm-none-eabi\lib\armv7-r\thumb\softfp\libm.a
7
C:\Program Files (x86)\GNU Tools ARM Embedded\4.6 2012q4\arm-none-eabi\lib\armv7e-m\libm.a
8
C:\Program Files (x86)\GNU Tools ARM Embedded\4.6 2012q4\arm-none-eabi\lib\armv7e-m\fpu\libm.a
9
C:\Program Files (x86)\GNU Tools ARM Embedded\4.6 2012q4\arm-none-eabi\lib\armv7e-m\softfp\libm.a
10
C:\Program Files (x86)\GNU Tools ARM Embedded\4.6 2012q4\arm-none-eabi\lib\fpu\libm.a
11
C:\Program Files (x86)\GNU Tools ARM Embedded\4.6 2012q4\arm-none-eabi\lib\thumb\libm.a
Gast #3090206
Lesenswert?

"FPU" im Sinne von Hardware-FPU bei einem STM32F1?
Dem Linker keine absoluten Pfade geben, denn das ist der Anfang vielen 
Übels. Falls CoIDE den Linker via Compiler-Frontend (gcc) aufruft, wird 
intern automatisch Objectcode aus der richtigen Library gelinkt.
Die Fragen von Holger sind noch unbeantwortet.
OP #3096178
Lesenswert?

Klappt leider immer noch nicht. Vielleicht ist es auch kein 
Linker-Problem.

Ich habe mal das Projekt (zum Compilieren mit Coocox und GCCARM 4.6 q4) 
sowie die main.c (zum Anschauen) angehängt.

Ausgabe des Projekt ist:
1
*** START ***
2

3
SYSCLK: he default value
4
HCLK: K: he default value
5
PCLK1: : he default value
6
PCLK2: : he default value

Also hier werden einige Zeichen verschluckt.

Die angehängte LED sollte über TIM2 im Sekundentakt blinken, tut dies 
aber eher 20x (10x an, 10x aus) in 9 Sekunden (also fast doppelt so 
schnell).

Interessanterweise ändert bei der TIM2 Konfiguration eine Änderung von
TIM_TimeBase_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1; auf
TIM_TimeBase_InitStructure.TIM_ClockDivision = TIM_CKD_DIV2;
nicht die Blinkzeit.
Angehängte Dateien:
Gast #3096786
Lesenswert?

>  sprintf(buffer, "\nSYSCLK: %li \n", RCC_Clocks.SYSCLK_Frequency / 1000);

Nimm

  sprintf(buffer, "\nSYSCLK: %d \n", RCC_Clocks.SYSCLK_Frequency / 
1000);

Dein sprintf() kann kein %li, da geht nur %i.
Und floating point kann es auch nicht.
OP #3097478
Lesenswert?

Ah, ok. Danke für die Info, werde ich mal probieren.
Gibt es denn auch Libs, die floating point können, oder kann das die 
GCCARM Toolchain generell nicht?

Im Coocox Forum scheint es ähnliche Probleme zu geben, allerdings habe 
ich auch noch keine Lösung dort gefunden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren