pow() funktioniert nicht mit Zuweisung

Gast #2464190
Lesenswert?

Hi,

ich möchte 10^x berechnen. Dazu benutze ich AVR Studio 5, ATMega16 und 
math.h.

pow(10,2), pow(10.0,5.0) funktioniert problemlos.
Auch pow(10, variable) geht, aber sobald ich eine Zuweisung mache mit:
1
double temp1=1;
2
double temp2=2;
3
temp1=pow(10, temp2);
klappt es nicht mehr.

Der Fehler den das AVR Studio auswirfst lautet:

Error  7  R_AVR_13_PCREL against symbol `__addsf3' defined in .text 
section in c:/program files (x86)/atmel/avr studio 5.0/avr 
toolchain/bin/../lib/gcc/avr/4.5.1/avr5\libgcc.a(_addsub_sf.o) 
/home/tools/hudson/workspace/avr8-gnu-toolchain/src/avr-libc/libm/fplib/ 
log.S   96  1  RF-Powermeter


Error  8  R_AVR_13_PCREL against symbol `__addsf3' defined in .text 
section in c:/program files (x86)/atmel/avr studio 5.0/avr 
toolchain/bin/../lib/gcc/avr/4.5.1/avr5\libgcc.a(_addsub_sf.o) 
/home/tools/hudson/workspace/avr8-gnu-toolchain/src/avr-libc/libm/fplib/ 
log.S   100  1  RF-Powermeter


Error  9  R_AVR_13_PCREL against symbol `__divsf3' defined in .text 
section in c:/program files (x86)/atmel/avr studio 5.0/avr 
toolchain/bin/../lib/gcc/avr/4.5.1/avr5\libgcc.a(_div_sf.o) 
/home/tools/hudson/workspace/avr8-gnu-toolchain/src/avr-libc/libm/fplib/ 
inverse.S   50  1  RF-Powermeter


Error  10  R_AVR_13_PCREL against symbol `__subsf3' defined in .text 
section in c:/program files (x86)/atmel/avr studio 5.0/avr 
toolchain/bin/../lib/gcc/avr/4.5.1/avr5\libgcc.a(_addsub_sf.o) 
/home/tools/hudson/workspace/avr8-gnu-toolchain/src/avr-libc/libm/fplib/ 
modf.S   90  1  RF-Powermeter


Mit den Fehlern kann ich auch überhaupt nichts anfangen...
#2464233
Lesenswert?

Dass du libm einbinden musst, hast du hoffentlich in der FAQ schon 
gefunden. (Punkt 2 in der FAQ)

Eine Anmerkung noch:
Du solltest dir gut überlegen, ob dein x in 10^x eigentlich immer eine 
ganze Zahl ist. Wenn nicht, dann geht es nicht anders. Aber für zb x^2 
ist pow mit Kanonen auf Spatzen geschossen. pow ist eine teure Funktion. 
Wenn es nicht sein muss, dann benutzt man sie nicht.
Persönliche Seite #2464260
Lesenswert?

Karl Heinz Buchegger schrieb:
> Dass du libm einbinden musst, hast du hoffentlich in der FAQ schon
> gefunden. (Punkt 2 in der FAQ)

Das hilf in den meisten Fällen; nämlich dadurch, daß Sprung-Offsets 
wieder klein genug werden, um in 13 Bits zu passen.

Allerdings hülft es nicht immer, da sich in den Quellen explizite 
RJMP/RCALL zu externen Modulen finden, deren Ablage nicht bekannt ist. 
Werden die so lokatiert, daß der Sprung sich als zu geizig erweist, kann 
der Linker nix anderes machen, als zu meckern.

Der Linker ist nicht in der Lage, kurze Sprünge zu langen zu relaxen; 
dazu müsste viel mehr Logik eingebaut werden, weil sich dadurch auch 
lokale Sprungoffsets ändern können und wegen des breiteren Code u.U. 
nicht mehr passen und der Linker diese ebenso nachflicken müsste.

D.h. auch in

SBRC 1,2
RJMP .label

Müsste das RJMP durch ein JMP ersetzt werden, was weitere 
Codevergrößerung bwirkt, usw, usw.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren