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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.