Salu zusammen Ich arbeite mit einem MSP430F149 und dem mspgcc Compiler für Eclipse. Nun muss ich in einer Rechnung die Quadratwurzel ziehen. Geht das mit dem Befehl sqrt? Habe gehört dass es da zu Problemen kommen kann, oder mache ich mir da unnötige Gedanken? Weiter muss ich noch Winkelfunktionen ala sin, cos, asin, acos verwenden. Muss ich da was einbinden oder stehen mir die Funktionen einfach zur Verfügung? Hoffe nicht das ich das noch über Reihen realisieren muss. Wäre über eine Antwort dankbar Merci im Voraus Greets reflection
#include <math.h> Diese Headerdatei mal im Editor aufmachen und ansehen. Eine Floating-Point-Emulation belegt viel Flash-ROM, Du wirst nicht mit jedem MSP430 nutzen können.
Schau Dir mal bei IAR.com die Application Note bzgl. Wurzel an. Diese wirst Du sicher auch mit mspgcc nutzen können. => Es ist eine schöne kurze Wurzelfkt. mit hinreichender Genauigkeit.
Vielen Dank für die Antworten Ich werde es einmal versuchen Gruss reflection
Ich habe nun folgendes versucht: float acc_result = sqrt _PARAMS((acc_x * acc_x) + (acc_y * acc_y) + (acc_z * acc_z)); wollte es einmal mit der math.h lösen. Habe diese auch eingebunden, aber er bringt immer die Fehlermeldung: Undefined reference to 'sqrt' Was mich ich denn nu wieder falsch. :o) Gruss reflection PS: Auch die sin Funktion kann ich nicht verwenden, erscheint die selbe Fehlermeldung beim Compilieren
Dann ist die Funktion nicht implementiert, sonder nur der Funktionsrumpf in der Header-Datei. Die muss dann vom User selbst in geeigneter Weise bereitgestellt werden. ist genau wie bei printf(), da muss man putc() auch selber machen, der Compiler kann ja nicht wissen, wohin man die printf() Ausgabe haben will.
Nein, das ist eher unüblich. Linkst Du auch mit libm.a?
rufus wrote: Nein, das ist eher unüblich. Linkst Du auch mit libm.a? Sorry, traue mich fast nicht das zu sagen, aber ich weiss nicht was Du meinst. Bin noch rel. neu mit dem ganzen Thema. Wo sehe ich mit was ich linke, in den Project Options? Greets
Damit Floatingpoint-Arithmetik genutzt werden kann, muss die dafür zuständige Library zum Programm gelinkt werden (ganz schicke sagen "das Programm muss gegen die Library gelinkt werden"). In dieser Library ist der Code enthalten, der erforderlich ist, um Floating-Point-Arithmetik auszuführen, also auch der Code für die Grundrechenarten etc. Und die Implementierung der Funktion sqrt gehört auch in diese Library. Das Linken mit einer Library geschieht beim gcc mit der Kommandozeilenoption -l<libraryname> Die Library heißt libm.a, allerdings ist sowohl das Präfix "lib" als auch die Dateinamenserweiterung ".a" wegzulassen, so daß die Kommandozeilenoption so aussieht: -lm Viel Erfolg.
Die Frage meinst Du jetzt nicht ernst, oder? Du verwendest einen Compiler. Das ist ein Programm, das aufgerufen wird, um irgendwelche Dinge zu tun. Und welche das sind, wird ihm mit Kommandozeilenargumenten/optionen mitgeteilt. Und die stehen beispielsweise im Makefile.
Tja, wie gesagt, mir hat noch nie jemand etwas über uP erzählt. Habe ich mir selber irgendwie zusammengeschustert, anders kann man es nicht sagen. Ich habe was versucht aber jetzt geht gar nichts mehr :o( Er bringt nur noch einen Error, nämlich das er nichts macht... So long, wird wohl wieder ein riesen Akt werden. Also langsam frage ich mich ja schon. Kann doch nicht so schwer sein ein Tool zu entwickeln wo ich einfach eine Wurzel ziehen kann ohne tausend Sachen zu wissen. Langsam aber sicher denke ich, dass ich von uP's die Finger lasse und mich wieder der Analog Technik widme, da hab ich wenigstens einigermassen nen Plan. Danke aber für Hilfe, auch wenn ichs nicht hin kriege Greets
So, der Fehler ist raus. Ich habe einfach unter den Project Preferences beim ersten Fenster dort wo msp430-gcc steht noch ein -m angehängt. Der Fehler mit dem sqrt ist behoben, aber dafür habe ich 5 neue Errors.
Jo, Irrtum von mir, man muss dem Linker "nur" passend sagen, er soll die libm.a einbinden. Das ist über das Eclipse-Plugin ganz schön russisch gelöst, aber naja, Open-Source-Gefrickel eben. Siehe Bild, so klappts bei mir dann mit sqrtf(..) kann ich Wurzel aus float ziehen. Frisst aber auch mal locker 3,5kByte ROM für eine einzige Wurzel :-/
Wie kommst du darauf, eine ominöse Option -m an den Compiler-Aufruf zu kleben? Wir haben doch die ganze Zeit vom Linker geschrieben. Dem musst du das -lm mitgeben. Siehe oben. Mit -m beim Kompiler kommen bei mir natürlich auch massig unsinnge Fehler....
Salu zusammen Sorry, aber wir haben wohl aneinander vorbeigeredet. Ich habs natürlich im Linker eingetragen. Das Problem war bei mir, dass er mir einen Fehler bringt mit sqrt. Wechsle ich den Befehl zu sqrtf funktioniert es. Ist sqrt nur für Integer zulässig? Danke für die Hilfe, hats also doch noch geklappt :o) Tut mir echt leid für Euch, bin sonst schon der der sich einliest ect. aber im Moment fehlt mir die Zeit um lange zu probieren, auch wenn es interessant wäre. Greets und hoffentlich bis "nicht" so bald, sonst gibts wieder Arbeit :o) reflection
Könnte sqrt eine Funktion sein, die die Quadratwurzel eines double-Wertes berechnet? Und sqrtf die float-Variante?
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.