Forum: Mikrocontroller und Digitale Elektronik STM32F4xxx - FPU - GCC Codegenerierung


von STMApprentice (Gast)


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?

von m.n. (Gast)


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.

von Nop (Gast)


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.

von Karl (Gast)


Lesenswert?

Es gibt auch einen compilerschalter, der single constants macht. 
Allerdings kann das fiese Überraschungen geben, wenn man mal wo anders 
kompiliert

von m.n. (Gast)


Lesenswert?

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.

von STMApprentice (Gast)


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.

von c-hater (Gast)


Lesenswert?

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?

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


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"

: Bearbeitet durch User
von m.n. (Gast)


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.

von holger (Gast)


Lesenswert?

STM32F767 kann auch double mit der FPU.

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

holger schrieb:
> STM32F767 kann auch double mit der FPU.

Das ist ja auch der Chuck Noris unter den STMs. ;)

von Johannes S. (Gast)


Lesenswert?

Marcus H. schrieb:
> holger schrieb:
> STM32F767 kann auch double mit der FPU.
>
> Das ist ja auch der Chuck Noris unter den STMs. ;)

Das wäre zur Zeit doch eher H7 mit seinen 400 MHz.

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Johannes S. schrieb:
> Marcus H. schrieb:
>> holger schrieb:
>> STM32F767 kann auch double mit der FPU.
>>
>> Das ist ja auch der Chuck Noris unter den STMs. ;)
>
> Das wäre zur Zeit doch eher H7 mit seinen 400 MHz.

Chuck Noris sein kleiner Bruder? :)

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.