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
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.
Max schrieb: > Hoffe jemand ist schon einmal dagegen gerannt. Wenn ich in einem existierenden Embitz Projekt (F407) mit
1 | #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.
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
1 | for (int i = 0; i < 320; i++) { // Sinus zeichnen |
2 | double s = SineAmplitude * sin ((long double) i / SineFrequency); |
3 | printfTiny ("SINUS %i %i ", i, (int) s); |
4 | // ILI9341_DrawPixel (i, 75 + (int) s ,YELLOW);
|
5 | // ILI9341_DrawPixel (i, 175 + (int) s ,GREEN);
|
6 | }
|
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).
Max schrieb: > Wenn ein Beispiel Projekt gewünscht wird bitte sagen. Ja, aber das hatte ich schon gesagt.
Für ein printf bist du zu geizig, aber rechnest mit Long Double um es dann nach int zu casten?
>> 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.
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
>> Dort dann auf Linker-settings und -lm eintragen.
Wo in Linker Settings ?
Siehe Screenshots, ich bekomme dann einen anderen Fehler.
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
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.
Hab dein Projekt heruntergeladen, das Flag eingefügt und kompiliert. Ergebnis im Anhang. Wieso verschwendest du meine Zeit?? mfg
:
Bearbeitet durch User
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 ....
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.
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.
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.