Forum: Mikrocontroller und Digitale Elektronik Wie beim STM32f4 float sin/cos machen?


von Dirk (Gast)


Lesenswert?

Hallo.

Ich bin wohl gerade zu blöd!

Ich will auf einem STM32F4 mit float rechen.
Normales A = B * 1.34536, geht aber nun brauche ich die Sinus Funktion.
Allso math.h geladen und mal A = sinf(b) geschrieben.

Fehler: Findet sinf nicht und ich verstehe gerade nicht warum.

Was kann man hier falsch machen oder besser wie geht es richtig?

von STK500-Besitzer (Gast)


Lesenswert?

Dirk schrieb:
> Was kann man hier falsch machen oder besser wie geht es richtig?

math.h?

von beo bachta (Gast)


Lesenswert?

Dirk schrieb:
> Allso math.h geladen

Zeig mal wie du math.h "lädst".

von beo bachta (Gast)


Lesenswert?

Dirk schrieb:
> und mal A = sinf(b) geschrieben

... oder mal sin(...) versuchen?

von Johannes S. (Gast)


Lesenswert?

Dirk schrieb:
> A = B * 1.34536

ist allerdings eine double Berechnung die nicht von der FPU profitiert. 
Das kleine 'f' an den Konstanten macht einen großen Unterschied.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Dirk schrieb:
> Fehler: Findet sinf nicht und ich verstehe gerade nicht warum.

Bitte Fehlermeldung posten, damit man sehen kann, ob der Compiler oder 
der Linker "sinf nicht findet".

Ist "sinf" ein Tippfehler? Die Funktionen heißen sin() und cos(). 
Außerdem musst Du dem Linker noch mitteilen, dass die Mathe-Lib 
dazugelinkt werden soll, i.a. durch "-lm".

von Dirk (Gast)


Lesenswert?

sin ergibt das gleiche!

#include <math.h> wie den sonst?

Das war nur mal so eben dahin geschieben, das f ist schon im Code wo es 
hin gehört.

von Johannes S. (Gast)


Lesenswert?

sinf() gibt es und rechnet in float in der FPU, sin() in double und 
damit braucht es deutlich länger.

von Dirk (Gast)


Lesenswert?

Linker??? Da muss ich mal schauen, das könnte es sein.
Habe gerade nicht das Projekt hier, muss ich nachher zuhause prüfen.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Dirk schrieb:
> #include <math.h> wie den sonst?

Das ist für den Compiler, was hast Du für den Linker getan? Da musst Du 
noch die math-Lib hinzulinken ("-lm").

Zeig bitte die Fehlermeldung. Eine Beschreibung des Fehlers in Worten 
hilft hier nicht weiter.

von beo bachta (Gast)


Lesenswert?

Ich hätte noch anzubieten:

#include <arm_math.h>

   * @brief  Fast approximation to the trigonometric
   * sine function for floating-point data.
   * @param[in] x input value in radians.
   * @return  sin(x).   */

  float32_t arm_sin_f32(float32_t x);

Das wäre dann "echtes 32-Bit float" statt double.
Ausserdem gilt was Frank schon geschieben hat (ist aber
nicht relevant zur Compile-Zeit):

Frank M. schrieb:
> Außerdem musst Du dem Linker noch mitteilen, dass die Mathe-Lib
> dazugelinkt werden soll, i.a. durch "-lm".

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.