mikrocontroller.net

Forum: Compiler & IDEs EMBITZ math.h


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Max (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

ich verwende embitz als IDE und habe die math.h eingebunden. Wenn ich 
z.B. sin verwende dann bekomme ich die Fehlermeldung undefined reference 
to sin. Ich habe einige Artikel zum gcc gefunden mit dem Hinweis im 
Linker die option -LM zu verwenden. Wo zum Teufel macht man das in 
embitz ?

Hoffe jemand ist schon einmal dagegen gerannt.

Besten Dank

von Markus F. (mfro)


Bewertung
0 lesenswert
nicht lesenswert
Max schrieb:
> Ich habe einige Artikel zum gcc gefunden mit dem Hinweis im
> Linker die option -LM zu verwenden. Wo zum Teufel macht man das in
> embitz ?

Bei embitz kann ich dir nicht helfen, aber ich kann dir verraten, daß 
die Option nicht -LM, sondern -lm heisst.

von STM Apprentice (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Max schrieb:
> Hoffe jemand ist schon einmal dagegen gerannt.

Wenn ich in einem existierenden Embitz Projekt (F407) mit
#include <math.h>

die Header-Datei hereinziehe und einen Sinus berechnen
lasse geht das ohne weitere Mühen bzw Fehlermeldungen.

Deswegen schlage ich vor du baust ein Minimal-Projekt und
postest das hier, dann kann man sehen was schief läuft.

von Max (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hat ein bischen gedauert. Ich habe das Ganze mal auf eine "main" 
reduziert und damit kann man den Fehler sehen. Test Programm im Anhang.

Es geht um folgende Berechnung / code
    for (int i = 0; i < 320; i++) {                                       // Sinus zeichnen
        double s = SineAmplitude * sin ((long double) i / SineFrequency);
        printfTiny ("SINUS %i %i ", i, (int) s);
//        ILI9341_DrawPixel (i, 75 + (int) s ,YELLOW);
//        ILI9341_DrawPixel (i, 175 + (int) s ,GREEN);
    }

Wie man erahnen kann möchte ich einen Sinus auf einem Display zeichnen. 
Dieser Code funktioniert unter AVR Studio gcc einwandfrei. Hier unter 
EmBitz kommt es zum besagtem Fehler. Ich habe die Ausgabe hier auf die 
UART gemacht.

Wenn ein Beispiel Projekt gewünscht wird bitte sagen. Ich kann auch 
gleich das EmBitz Projekt hochladen (wenn man es braucht).

von STM Apprentice (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Max schrieb:
> Wenn ein Beispiel Projekt gewünscht wird bitte sagen.

Ja, aber das hatte ich schon gesagt.

von Johannes S. (jojos)


Bewertung
0 lesenswert
nicht lesenswert
Für ein printf bist du zu geizig, aber rechnest mit Long Double um es 
dann nach int zu casten?

von Max (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Projekt siehe Anhang.

von Max (Gast)


Bewertung
0 lesenswert
nicht lesenswert
>> Für ein printf bist du zu geizig, aber rechnest mit Long Double um es
>> dann nach int zu casten?

Hast du zur Lösung was beizutragen ? Das ist ein Beispiel.

von Felix F. (wiesel8)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,
gehe auf Project->Build Options. Sieht dann so aus: 
https://www.mikrocontroller.net/wikifiles/5/5c/Fpu_2.png

Dort dann auf Linker-settings und -lm eintragen.

mfg

von Max (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
>> Dort dann auf Linker-settings und -lm eintragen.
Wo in Linker Settings ?

Siehe Screenshots, ich bekomme dann einen anderen Fehler.

von Felix F. (wiesel8)


Bewertung
0 lesenswert
nicht lesenswert
Du hast kein Device definiert. Wie hast du das Projekt erstellt? Über 
den Wizard wird das alles automatisch gemacht.
Zeig mal die Ausgabe des Build Logs.

mfg

: Bearbeitet durch User
von Max (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Doch, ich habe den Wizard verwendet und sehr wohl ein Device angelegt. 
Das Projekt habe ich ja hochgeladen, verwende es doch einfach und schau 
selbst.

von Felix F. (wiesel8)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hab dein Projekt heruntergeladen, das Flag eingefügt und kompiliert.
Ergebnis im Anhang. Wieso verschwendest du meine Zeit??

mfg

: Bearbeitet durch User
von STM Apprentice (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Max schrieb:
> Doch, ich habe den Wizard verwendet und sehr wohl ein Device angelegt.

Hab mal ein leeres Projekt angelegt und deine Source main.c
hineinkopiert. Dann noch das -lm Flag gesetzt. Das lässt sich
dann einwandfrei compilieren.

An was es genau liegt weiss ich jetzt auch nicht ....

Das angehängte Projekt Empty_Project_F103C8T6.zip ist nun
verständlicherweise nun nicht ganz empty ....

von STM Apprentice (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Felix F. schrieb:
> Wieso verschwendest du meine Zeit??

Da kann man noch in die Falle stolpern dass es das Flag für
Debug- und Release-Version getrennt setzbar gibt.

Vielleicht ist ihm das passiert.

von Max (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Danke Felix und Apprentice, jetzt geht es. Ich habe das -lm an die 
falsche Stelle getan. Danke für das Empty Projekt, damit war es dann 
klar wie es geht. Meinen Besten Dank nochmal.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.