www.mikrocontroller.net

Forum: Compiler & IDEs floating point und der mspgcc


Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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.
float TempValue;
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 :-)

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-))

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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])

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

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

Das sollte so eigentlich nicht sein.

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.