Forum: Mikrocontroller und Digitale Elektronik STM32 - Float Konvertierung - Führt nicht zum Compilerfehler, aber zum Abbruch zur Laufzeit


von Bernd (Gast)


Lesenswert?

Hallo Zusammen,

es scheint, ich kann nicht mir Float Zahlen arbeiten.

Diese Beispiel versuche ich gerade auszuführen.

So funktioniert es noch (kein Compilerfehler wird angezeigt)
1
      s32 TestLong = 0;
2
      float TestD;
3
4
      TestD = 123 / 100.0;

So funktioniert es nicht mehr (kein Compilerfehler wird angezeigt)
STM32 bleibt einfach an der betreffende Stelle stehen
1
      s32 TestLong = 0;
2
      float TestD;
3
4
      TestD = 123 / 100.0;
5
      TestLong = TestD * 100.0;

Auch das hier funktionierte nicht
1
TestLong = (long)(TestD * 100.0);
2
TestLong = (s32)(TestD * 1000);

Ich nutze Codesourcery C++ lite, Compiler wird so gestartet
1
C:\Dokumente und Einstellungen\BB\Desktop\Projekt33>cs-make
2
arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -Wall -Wextra -g -Os -ffunction-sectio
3
ns -std=gnu99 -I . -I libstm32/inc -I include -DMCK_STM32_32MHZ    -c -o source/
4
main.o source/main.c
5
arm-none-eabi-gcc libstm32/src/stm32f10x_vector.o stm32f10x_it.o source/main.o s
6
ource/stm32_init.o source/adc.o source/gpio_config.o source/timer.o source/i2c.o
7
 source/uart.o source/rprintf.o libstm32/libstm32.a --output projekt33.elf
8
 -nostartfiles -Wl,--gc-sections,-Map=projekt33.elf.map,-cref -I . -I
9
 libstm32/inc -I include -L libstm32 -lc -lm -lgcc -lc -T stm32.ld
10
arm-none-eabi-objcopy -O binary projekt33.elf projekt33.bin
11
arm-none-eabi-objcopy -O ihex projekt33.elf projekt33.hex
12
arm-none-eabi-objdump -h -S -C -D projekt33.elf > projekt33.lss

Über Hilfe würde ich mich sehr freuen.

Vielen Dank & Viele Grüße
Bernd

von Bernd (Gast)


Lesenswert?

Keiner eine Idee ? Kann doch nicht sein, das man mit dem STM32 keine
Floats in Interger bekommt.

Hier nochmal das Problem in aller Kürze
1
   s32 zahl= 0;
2
   float kommazahl = 0.0;
3
   zahl = 2070;
4
   kommazahl = ((float)zahl) / 2500.0;

gibt einen Programmabbruch zur Laufzeit. Compiler sagt nichts dazu.

Hatte schon irgendjemand mal das Problem?

Danke & Viele Grüße
Bernd

von mars (Gast)


Lesenswert?

Hat der STM32 auch eine Hardware FPU?

von Bernd (Gast)


Lesenswert?

Hallo,

nein STM32 hat wohl keine FPU (Herstellerinfo hab ich nicht gefunden,
aber in einem anderen Thread stand etwas diesbezüglich).
(Ich hoffe mal das ist kein K.O. Argument)

Hat irgendjemand eine Idee?
(brauch ich dringend....)

Danke & Viele Grüße
Bernd

von Rolf Magnus (Gast)


Lesenswert?

> nein STM32 hat wohl keine FPU

Dann solltest du dem Compiler das sagen. Der versucht vermutlich, die 
FPU zu benutzen.  Probiere mal -msoft-float als zusätzliche 
Compiler-Option.

von (prx) A. K. (prx)


Lesenswert?

Mit dem STM32 hat das natürlich überhaupt nichts zu tun, denn der hat 
keine FPU, kann also auch nichts falsch machen.

Eher schon hängt das mit der Einstellung des Compilers und mit der 
Runtime-Library zusammen.

von Bernd (Gast)


Lesenswert?

Hallo Zusammen,

vielen Dank.
1
C:\Dokumente und Einstellungen\BB\Desktop\Projekt33>cs-make
2
arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -Wall -Wextra -g -Os
-msoft-float
1
 -ffunction-sectio
2
ns -std=gnu99 -I . -I libstm32/inc -I include -DMCK_STM32_32MHZ    -c -o source/
3
main.o source/main.c
4
arm-none-eabi-gcc libstm32/src/stm32f10x_vector.o stm32f10x_it.o source/main.o s
5
ource/stm32_init.o source/adc.o source/gpio_config.o source/timer.o source/i2c.o
6
 source/uart.o source/rprintf.o libstm32/libstm32.a --output projekt33.elf
7
 -nostartfiles -Wl,--gc-sections,-Map=projekt33.elf.map,-cref -I . -I
8
 libstm32/inc -I include -L libstm32 -lc -lm -lgcc -lc -T stm32.ld
9
arm-none-eabi-objcopy -O binary projekt33.elf projekt33.bin
10
arm-none-eabi-objcopy -O ihex projekt33.elf projekt33.hex
11
arm-none-eabi-objdump -h -S -C -D projekt33.elf > projekt33.lss

Hat leider auch keinen Erfolg gebracht, (inkl. -msoft-float hatte ich
auch mal bei den Linker Flag gesetzt gehabt).

Akutell hab ich diese im Projekt
1
#include <stdio.h>
2
#include <string.h>
3
#include <math.h>

Wenn die Libarys nicht stimmen, kann ich irgendwo nachschauen,
welche Libarys für die Floatumrechnung eingebunden werden?

Danke & Viele Grüße
Bernd

von Christoph B. (christophbudelmann) Benutzerseite


Lesenswert?

Sofern das Problem noch nicht gelöst sein sollte, schau mal hier:

Beitrag "STM32-Float-Ops gehen nicht"

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.