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?
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.
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.
Es gibt auch einen compilerschalter, der single constants macht. Allerdings kann das fiese Überraschungen geben, wenn man mal wo anders kompiliert
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.
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.
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?
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
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.
holger schrieb: > STM32F767 kann auch double mit der FPU. Das ist ja auch der Chuck Noris unter den STMs. ;)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.