Forum: Mikrocontroller und Digitale Elektronik Atmega32 probleme mit math.h


von Der da (Gast)


Lesenswert?

Hallo,
ich brauche ein paar Funktionen aus der math.h um eine analoge 
Eingangsgröße in meinem µC zu linearisieren. Jedoch macht der Compiler 
Probleme.
1
c:/winavr-20090313/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr5\libc.a(floatsisf.o): In function `__floatunsisf':
2
(.text.fplib+0x0): multiple definition of `__floatunsisf'
3
c:/winavr-20090313/bin/../lib/gcc/avr/4.3.2/avr5\libgcc.a(_usi_to_sf.o):(.text+0x0): first defined here

Das spuckt der aus.

Ich habe folgenden Programmcode:
1
#include <math.h>
2
3
double a,b;
4
5
//......
6
//......
7
8
9
// so klappt es:
10
a=log10(5);
11
12
// so nicht: (da kommt der Fehler)
13
// "b" soll den Messwert aus meinem ADC darstellen
14
b=5;
15
a=log10(b);

Leider werde ich aus dem Fehlercode nicht schlau. Habe auch alles in 
double deklariert und die math.h schön included.
Wäre super wenn mir jemand weiterhelfen könnte. Danke!!!

von Karl H. (kbuchegg)


Lesenswert?

Hast du beim Linken die Math-Lib mit angegegeben?

In der Linker Zeile müsste ein  -lm auftauchen.

von Der da (Gast)


Lesenswert?

Hallo und vielen Dank für die schnelle Antwort!

Daran könnte es durchaus liegen, jedoch weiß ich nicht wie ich bei AVR 
Studio4 zu der Linkeroption komme... Im Internet gibt es zwar 
anleitungen wie man es bei AVR Studio 5 macht aber bei 4 sieht das alles 
naja sehr abgespeckt aus.

Hast du vielleicht eine Idee?

Grüße

von Cyblord -. (cyblord)


Lesenswert?

Der scheint eher mehrere __floatunsisf zu linken. Was natürlich zu einem 
Konflikt führt. Warum linkt er

c:/winavr-20090313/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr5\lib 
c.a
UND
c:/winavr-20090313/bin/../lib/gcc/avr/4.3.2/avr5\libgcc.a

Ist das normal? Ich denke eher nicht.

von Oliver S. (oliverso)


Lesenswert?

Der da schrieb:
> jedoch weiß ich nicht wie ich bei AVR
> Studio4 zu der Linkeroption komme...

In den Project settings, auf einem der Tabs.

Oliver

von Der da (Gast)


Lesenswert?

Wie gesagt, sobald ich die Variable aus der Log.-Fkt. entferne ist alles 
cool. Egal ob die Variable nun ein einfacher double Wert ist, den ich 
für den Testzweck mit double a; definiert habe, oder tatsächlich mein 
Messwert vom ADCH. Beides macht den gleichen Fehler.

Gruß

von Cyblord -. (cyblord)


Lesenswert?

Der da schrieb:
> Wie gesagt, sobald ich die Variable aus der Log.-Fkt. entferne ist alles
> cool.

Ja
> log10(5)
ist ja auch eine Konstante.

Trotzdem könnte -lm als Linkeroption dein Problem lösen.

: Bearbeitet durch User
von Der da (Gast)


Lesenswert?

[code]
Build started 15.4.2014 at 11:34:47
avr-gcc -mmcu=atmega32 -lm  -Wl,-Map=Midi.map Midi.o     -o Midi.elf
c:/winavr-20090313/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr5\lib 
c.a(floatsisf.o):  In function `__floatunsisf':
(.text.fplib+0x0): multiple definition of `__floatunsisf'
c:/winavr-20090313/bin/../lib/gcc/avr/4.3.2/avr5\libgcc.a(_usi_to_sf.o): 
(.text+0x0):  first defined here
make: *** [Midi.elf] Error 1
Build failed with 1 errors and 0 warnings...
[code]

Nun macht der das wenn ich -lm beigefügt habe.

von Cyblord -. (cyblord)


Lesenswert?

Der da schrieb:

>
> Nun macht der das wenn ich -lm beigefügt habe.

Also genau dasselbe wie vorher...

von Der da (Gast)


Lesenswert?

Ja richtig :-), leider!
Andere Ideen?

von Der da (Gast)


Lesenswert?

Naja, habe es hinbekommen... Lösung: Habe einfach zu AVR Studio 5 
gewechselt... Danke trotzdem!

Gruß

von Oliver S. (oliverso)


Lesenswert?

Der da schrieb:
> c:/winavr-20090313/

ist ja selbst für WinAVR eine uralt-Version. Die letzte verfügbare 
Version (2010...) funktioniert ohne Probleme.

Der da schrieb:
> Naja, habe es hinbekommen... Lösung: Habe einfach zu AVR Studio 5
> gewechselt

Das allerdings ist die schlechteste aller Lösungen. Studio 5 hat wohl 
niemals richtig funktioniert. Wenn schon, nimm wenigstens Version 6.1 
oder 6.2

Oliver

von Der da (Gast)


Lesenswert?

Vielen Dank für den Hinweis. Ich lade mir dann 6.1 herunter.

Gruß

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.