Forum: Compiler & IDEs floating point und der mspgcc


von TheMason (Gast)


Lesenswert?

Hallo leute,

nachdem ich mich mit dem mspgcc auseinandergesetzt habe und nun das eine 
oder andere umsetzen möchte mal eine frage zum thema floating point.
ich habe hier schon mehrfach gelesen das es mit fp und mspgcc einige 
probleme gibt (funktionen nicht in der lib vorhanden)
hat eigentlich irgendjemand schonmal mit fp auf dem msp erfolgreich 
gearbeitet ? mit iar hatte ich nie schwierigkeiten, beim mspgcc bekomme 
ich aber z.b. keine pow (oder powf) oder sin/cos funktion hin.
würde das bei einfachen operationen (addieren, multiplizieren, 
dividieren) ebenfalls solche probleme geben ?
ich frage deshalb da ich mit einem msp und meinem fpga board einen 
synthesizer/audio-system programmieren möchte. dazu komme ich nur 
teilweise um floating-point herum. es geht dabei um die berechnung von 
filterkoeffizienten (die genauigkeit ist sehr entscheidend). ich habe 
schon mit tabellen gearbeitet, aber ich brauche noch "einfache" 
operationen mit fp um die ich nicht drumherum komme (division, 
multiplikation, addition).
machen diese einfachen sachen beim mspgcc ebenfalls so probleme wie eine 
pow-funktion ?!

gruß
rene

von Christian R. (supachris)


Lesenswert?

Also Addition usw klappt bei mir problemlos. Hab gerade mal getestet, 
den Wert der interne Temp-Diode gleich on-Chip in den Float-Wert 
umzurechnen.
1
float TempValue;
2
TempValue = ((float)temp * 0.17197200296) - 277.74648;

Klappt, bei 1743 in temp kommt 22.0007019 in TempValue raus.
Achso, frisst aber 3kByte an Flash, die 2 zeilen :-)

von TheMason (Gast)


Lesenswert?

@chris

danke für den schnellen test. werds gleich auch mal ausprobieren.
das das ganze 3kByte frisst ist nicht so wild (habe eh zwischen 48 und 
60kByte Flash), vor allem wenn da noch koeffiziententabellen, 
zeichensätze, texte und und und reinkommen machen selbst 6kByte nichts 
aus.
mir gehts nur darum das ich im moment keine möglichkeit sehe 
floatingpoint zu umgehen (bei filterkoeffizienten muß man recht genau 
sein, wer einmal ein ausgerastetes iir-filter über kopfhörer gehört hat 
weiß was ich meine :-))
da nehme ich lieber etwas mehr speicherverbrauch und rechenzeit in kauf 
als gefahr zu laufen das mein filter amok läuft (is echt nicht gute fürs 
ohr :-))

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> beim mspgcc bekomme ich aber z.b. keine pow (oder powf)
> oder sin/cos funktion hin.

Was heisst das? Spuckt der Compiler irgendwelche Fehlermeldungen aus?

von TheMason (Gast)


Lesenswert?

ich habe das selbe problem wie hier im forum schon einmal geschildert 
wurde (mspgcc und math oder so ähnlich heißt der beitrag), das der 
linker die pow-funktion nicht findet. (egal ob mit -lm oder libm.a). 
auch powf hat nicht funktioniert. dasselbe für sin/cos/tan/exp/ln usw. 
hätte da noch jemand eine idee, da ich diese bei späteren berechnungen 
brauche ?

normale floatingpoint operationen (+ - * /) scheinen zu funktionieren 
(habs noch nicht laufen lassen, aber es kommt kein linker errror und der 
code wird entsprechend groß [müsste in etwa passen])

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

In math.h sind die von Dir genannten Funktionen deklariert, aber in 
libm.a nicht enthalten?

Das sollte so eigentlich nicht sein.

von TheMason (Gast)


Lesenswert?

@rufus

der eigentliche witz ist das die funktionen in der math.h deklariert 
sind und  in der libm.a auch vorhanden (mit msp430-objdump 
nachgeschaut). trotzdem meldet der linker das der die funktion nicht 
finden kann.
unter eclipse habe ich (beim managed c project) dem linker den pfad zu 
den msp430-libs gegeben und als datei einmal die libm.a und m (durch den 
automatischen prefix wird -lm daraus und das möchte der linker wohl 
gerne so sehen) angegeben. trotzdem findet der weder powf, sin, cos, 
exp, ln noch irgendeine andere funktion :-(
bin mir nicht sicher was ich da falsch gemacht haben könnte ...

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.