STM32F4xxx - FPU - GCC Codegenerierung

Gast #4904132
Mit Entsetzen habe ich festgestellt dass die angepriesenene
Floating Point Unit des F4xx "nur" single Precision kann.

Beim AVR GCC wird ja alles was double deklariert ist in float
behandelt. Wie ist es beim STM32F4xx? Könnt ihr mir bitte aus
dem Handgelenk schütteln was da passiert bevor ich mir ein
Kompilat erzeuge und dann nicht verstehe was im (zerlegten)
Maschinencode gemacht wird?
Gast
STMApprentice schrieb im Beitrag #4904132:
> Könnt ihr mir bitte aus
> dem Handgelenk schütteln was da passiert bevor ich mir ein
> Kompilat erzeuge und dann nicht verstehe was im (zerlegten)
> Maschinencode gemacht wird?

Man schreibt 'float' und es wird 'float' gerechnet - normalerweise mit 
der FPU. Schreibt man 'double' wird 'double' gerechnet, zwar immer per 
Software aber sehr flott: MUL und DIV ca. <= 1 µs @ 168 MHz bei 
doppelter Genauigkeit.
Gast
m.n. schrieb:
> Man schreibt 'float' und es wird 'float' gerechnet - normalerweise mit
> der FPU. Schreibt man 'double' wird 'double' gerechnet

Vorsicht an der Stelle.. der Default ist double, und die Promotion geht 
auch nach double.

float x = 1.0f;
...
x *= 3.3;

Die letztere Berechnung geht in double, weil 3.3 ohne Zusatz implizit 
double ist. Will man das vermeiden, muß man 3.3f nehmen, also float 
explizit.
Gast
Nop schrieb:
> Vorsicht an der Stelle.. der Default ist double, und die Promotion geht
> auch nach double.

Warum Vorsicht?
Die Befürchtung des TO ist doch eher, daß er nur 'float' bekommt, wie 
beim AVR-GCC. Mit 'double' liegt er doch auf der sicheren Seite.
Gast
m.n. schrieb:
> Die Befürchtung des TO ist doch eher

.... dass er nur float bekommt wenn er double sagt.

Oder dass er nur msec bekommt wenn er aber usec haben will
und der STM32F4xx das nicht hergibt.

Ich rechne ja schon vorsichtshalber nur mit uint64_t, aber wenn
es mal nicht anders geht .....

Danke für die Erläuterungen.
Gast
m.n. schrieb:

> wird 'double' gerechnet, zwar immer per
> Software aber sehr flott: MUL und DIV ca. <= 1 µs @ 168 MHz bei
> doppelter Genauigkeit.

Das kann ich kaum glauben, zumindest nicht für die Division. Beweise?
(Firma: www.harerod.de) Persönliche Seite
c-hater schrieb:
> m.n. schrieb:
>
>> wird 'double' gerechnet, zwar immer per
>> Software aber sehr flott: MUL und DIV ca. <= 1 µs @ 168 MHz bei
>> doppelter Genauigkeit.
>
> Das kann ich kaum glauben, zumindest nicht für die Division. Beweise?

Hab grad keinen F4-Aufbau auf dem Tisch liegen, deswegen kann ich's Dir 
nicht rausmessen, aber wenn jemand grad Zeit hat:

Beitrag "Floating Pointing Unit STM32F4"
Gast
c-hater schrieb:
>> wird 'double' gerechnet, zwar immer per
>> Software aber sehr flott: MUL und DIV ca. <= 1 µs @ 168 MHz bei
>> doppelter Genauigkeit.
>
> Das kann ich kaum glauben, zumindest nicht für die Division. Beweise?

Ich muß auch erst immer wieder suchen: 
Beitrag "Re: Controller mit FPU"

Die 50 ns sind geschenkt. In der Regel nehme ich immer 7 anstatt 5 
waitstates beim Flash-Zugriff. Dann muß ich nur an einer Schraube 
drehen, um auf 200 MHz umzuschalten.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.