Hallo, Ich bin gerade dabei ein Projekt von IAR auf Eclipse/GCC umzustellen. Dabei stoße ich auf das Problem, dass Methematische Funktionen nicht verfügbar sind. Woher kann ich diese bekommen? acosf, floorf, sinf, cosf, atanf, asinf, tanf Ich habe beim Linken den Parameter "-lm" sowie das Verzeichnis mit "-L" angegeben. Oder kann ich andere Funktionen verwenden, die das gleiche machen? Vielen Dank im Voraus.
Du kannst sin, cos, etc auf float verwenden. avr-gcc implementiert aus Effizienzgründen kein double, d.h. sin operiert auf float, und es gibt auch kein Overhead weil es double/float Konvertierungen gäbe. Intern wird auch mit float gerechnet, das zeigt ein Bloick ins lst-File.
Schau dir mal die definitionen in der math.h an, dort gibt es nur "double acos(double __x)". Also mach einfach das "f" am ende weg und alles wird gut. http://www.nongnu.org/avr-libc/user-manual/group__avr__math.html
Vielen Dank für die schnelle Antwort. Ich prüfe nun ob die Genauigkeit ausreicht. Ein Problem hat allerdings der AVR-GCC Linker: Sobald eine Datei die Endung ".C" also nicht ".c" hat, dann kann der Linker nicht mehr linken. Selbst wenn die Dateien beim Kompillieren so eingegeben wurden (makefile). Der Linker bring dann irgend welche Fehler Funktion XXX nicht gefunden. Es wäre sinnvoller die Meldung zu generieren: "Ich AVR-GCC bin zu blöde und kann .C Dateien nicht behandeln, bitte umbenennen in .c" (GCC Version 4.3.0)
Ja make ist aus der UNIX-Welt und dort wird zwischen Groß- und Kleinschreibung unterschieden. So unterscheidet der GCC eben die Dateiendung. Bei Assembler Dateien (.s/.S) wird auch unterschieden. Klein .s wird nicht durch den Precompiler gejagt, groß .S hingegen schon. So lassen sich auch in Assembler Programmen die C-Macros verwenden. Sehr praktisch eigentlich.
Markus wrote: > Es wäre sinnvoller die Meldung zu generieren: > "Ich AVR-GCC bin zu blöde und kann .C Dateien nicht behandeln, bitte > umbenennen in .c" Oder "Ich, AVR-GCC-Benutzer, bin zu blöde, das Manual zu lesen um zu erfahren, dass .C-Dateien als C++ behandelt werden." :-)) Wenn deine Dateien C-Dateien sind, dann benenne sie einfach mit einem kleinen C, und alles ist gut. Wenn es C++-Dateien sind, dann kannst du das große C benutzen, allerdings wird dir als nicht-Unix-Benutzer u. U. der Suffix .cc oder .cpp oder .cxx lieber sein, da der Unterschied augenfälliger ist. (Unix-Benutzer haben sich in den letzten 35 Jahren offenbar ganz gut daran gewöhnen können, zwischen Groß- und Kleinbuchstaben zu unterscheiden, so dass diese Tatsache für sie mit zu den selbstverständlichsten Dingen der Welt gehört.) Wenn du C++ schreibst, musst du natürlich auch den C++-Konventionen folgen, insbesondere musst du externe C-Funktionen mit
1 | extern "C" { |
2 | ...
|
3 | }
|
deklarieren. Du kannst die Sprachauswahl auch explizit mit -x c oder -x c++ auf der Compiler-Kommandozeile überschreiben.
Wegen diesem "C" und "c" habe ich fast einen Tag rum gemacht, daher meine Verärgerung. Jeder Linux User, der auch wegen irgend einem "Parameter" für irgend was einen Tag vergeigt würde sich auch grün und blau ärgern. Und garantiert haben alle Linux-User mal angefangen und Zeit damit sinnlos verbraten. (Ausser die die das programmiert haben, was wohl eine minderzahl ist) Groß und Kleinschreibung (vor allem im Dateisystem) ist zwar ein nettes Feature, sollte aber wegen der Übersichtlichkeit abgeschafft werden. So wie in Pascal. Das ist der einzige Linux-Bug, auch wenn es andere als Feature bezeichnen wollen und diese Meinung hat überhaupt nichts mit Windoof oder anderen vermutlichen anhängigkeiten zu tun. Auch wenn Linux schon seit 35 Jahren diesen Bug hat, könnte man den z.B. zur 50-Jahr-Feier doch auch mal entfernen. Mit den heutigen Rechenleistungen und Speicherressourcen muss man nun wirklich nicht mehr auf das verzichten. (Vor 35 Jahren möge es diesen Programmierern nicht anders möglich gewesen sein.)
Markus wrote: > Wegen diesem "C" und "c" habe ich fast einen Tag rum gemacht, daher > meine Verärgerung. Dann hättest du doch mal eher deine Fehlermeldungen gepostet. > Groß und Kleinschreibung (vor allem im Dateisystem) ist zwar ein nettes > Feature, sollte aber wegen der Übersichtlichkeit abgeschafft werden. Da könnte sich die Unix-Fraktion genauso hinstellen: Seit über 30 Jahren könnten Terminals und Drucker nicht mehr nur Großbuchstaben, sondern Groß- und Kleinbuchstaben ausgeben. Es wird endlich mal Zeit, dass alle Betriebssysteme sich daran gewöhnen und beide als voneinander unterschiedlich akzeptieren. Das ist eine Patt-Situation. > Das ist der einzige Linux-Bug, ... Linux hat ganz gewiss mehr Bugs als nur einen, aber das ist nun wirklich keiner. Schon deshalb nicht, weil es 1) schon immer so war (du vergisst, dass MS-DOS jünger ist als UNIX, es hat sich also, möglicherweise auf Grund seiner CP/M-Vergangenheit vorsätzlich und erst danach dafür unterschieden, Groß- und Kleinschreibung im Dateisystem zu ignorieren) und 2) sauber dokumentiert ist. > Auch wenn Linux schon > seit 35 Jahren diesen Bug hat, Linux ist gerade mal 16 Jahre alt. ;-) Aber UNIX ist deutlich älter, und auch älter als MS-DOS. Zur Erinnerung: MS-DOS hat in einer sehr frühen Version das hierarchische Dateisystem von UNIX übernommen, allerdings nur halbherzig, denn seine CP/M-Laufwerks- buchstaben hat es trotzdem noch beibehalten. > Mit den heutigen Rechenleistungen und > Speicherressourcen muss man nun wirklich nicht mehr auf das verzichten. Damit hat das nun rein gar nichts zu tun. Für einen Unix-Nutzer sehen deine Forderungen einfach nur unverständlich aus. Warum soll man auf ein lieb gewordenes Feature verzichten müssen, nur weil du mal einen Tag damit vergeigt hast? Wenn man alle Windows-Undinge zusammen zählt, womit andere Leute schon Wochen und Monate vergeigt haben, dürfte das System nach deiner Meinung schon längst nicht mehr existieren.
> Das ist eine Patt-Situation.
Ja, genau, daher lohnt sich nicht weiter zu diskutieren ;-)
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.