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.
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.
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