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.
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.