Forum: Compiler & IDEs acosf und asinf im AVR GCC ?


von Markus (Gast)


Lesenswert?

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.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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.

von Timmo H. (masterfx)


Lesenswert?

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

von Markus (Gast)


Lesenswert?

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)

von Timmo H. (masterfx)


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Markus (Gast)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Markus (Gast)


Lesenswert?

> 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
Noch kein Account? Hier anmelden.