mikrocontroller.net

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


Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)
      s32 TestLong = 0;
      float TestD;

      TestD = 123 / 100.0;

So funktioniert es nicht mehr (kein Compilerfehler wird angezeigt)
STM32 bleibt einfach an der betreffende Stelle stehen
      s32 TestLong = 0;
      float TestD;

      TestD = 123 / 100.0;
      TestLong = TestD * 100.0;

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

Ich nutze Codesourcery C++ lite, Compiler wird so gestartet

C:\Dokumente und Einstellungen\BB\Desktop\Projekt33>cs-make
arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -Wall -Wextra -g -Os -ffunction-sectio
ns -std=gnu99 -I . -I libstm32/inc -I include -DMCK_STM32_32MHZ    -c -o source/
main.o source/main.c
arm-none-eabi-gcc libstm32/src/stm32f10x_vector.o stm32f10x_it.o source/main.o s
ource/stm32_init.o source/adc.o source/gpio_config.o source/timer.o source/i2c.o
 source/uart.o source/rprintf.o libstm32/libstm32.a --output projekt33.elf
 -nostartfiles -Wl,--gc-sections,-Map=projekt33.elf.map,-cref -I . -I
 libstm32/inc -I include -L libstm32 -lc -lm -lgcc -lc -T stm32.ld
arm-none-eabi-objcopy -O binary projekt33.elf projekt33.bin
arm-none-eabi-objcopy -O ihex projekt33.elf projekt33.hex
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

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

   s32 zahl= 0;
   float kommazahl = 0.0;
   zahl = 2070;
   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

Autor: mars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat der STM32 auch eine Hardware FPU?

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

vielen Dank.
C:\Dokumente und Einstellungen\BB\Desktop\Projekt33>cs-make
arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -Wall -Wextra -g -Os 
-msoft-float
 -ffunction-sectio
ns -std=gnu99 -I . -I libstm32/inc -I include -DMCK_STM32_32MHZ    -c -o source/
main.o source/main.c
arm-none-eabi-gcc libstm32/src/stm32f10x_vector.o stm32f10x_it.o source/main.o s
ource/stm32_init.o source/adc.o source/gpio_config.o source/timer.o source/i2c.o
 source/uart.o source/rprintf.o libstm32/libstm32.a --output projekt33.elf
 -nostartfiles -Wl,--gc-sections,-Map=projekt33.elf.map,-cref -I . -I
 libstm32/inc -I include -L libstm32 -lc -lm -lgcc -lc -T stm32.ld
arm-none-eabi-objcopy -O binary projekt33.elf projekt33.bin
arm-none-eabi-objcopy -O ihex projekt33.elf projekt33.hex
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
#include <stdio.h>
#include <string.h>
#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

Autor: Christoph Budelmann (Firma: Budelmann Elektronik GmbH) (christophbudelmann) Benutzerseite
Datum:

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

Beitrag "STM32-Float-Ops gehen nicht"

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.