STM32F4xxx - FPU - GCC Codegenerierung

Gast #4904132
Lesenswert?

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 #4904201
Lesenswert?

STMApprentice schrieb:
> 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 #4904257
Lesenswert?

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 #4904474
Lesenswert?

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.
(Firma: www.harerod.de) Persönliche Seite #4904498
Lesenswert?

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 #4904578
Lesenswert?

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

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