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
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 :-)
@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 :-))
> 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?
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])
In math.h sind die von Dir genannten Funktionen deklariert, aber in libm.a nicht enthalten? Das sollte so eigentlich nicht sein.
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.