Frohe Weihnachten! Ich habe einen ATMEGA64 und versuche eine log10(rsq) Funktion zu implementieren. rsq ist dabei ein double. Leider bekomme ich immer die selbe Fehlermeldung: siehe Anhang als Libraries habe ich folgendes: #include <inttypes.h> #include <avr/io.h> #include <avr/interrupt.h> #include "math.h" #include "cerebotII.h" warum geht das nicht?????? HILFE!!!!!!!!!
Ich hab mathelib.h dazugefügt und ebekomme immer noch den selben Fehler. War das falsch?
Freshman schrieb: > Ich hab mathelib.h dazugefügt und ebekomme immer noch den selben Fehler. > > War das falsch? Dein Problem ist nicht irgendein Header File beim Compilieren Dein Problem ist beim Linken die Mathebibliothek. in die Linkerflags im Makefile muss noch ein -lm mit rein (siehe weiter oben angegebenen Link. Dort in der ersten Antwort die letzte Zeile. Schau dir an, wo dort -lm auftaucht) Sieh es so: Der math.h ist sowas wie ein Inhaltsverzeichnis der Funktionen die vorhanden sind. Aber ein Inhaltsverzeichnis sind nicht die eigentlichen Funktionen. Genausowenig wie du ein Buch benutzen kannst, von dem du nur das Inhaltsverzeichnis hast. Erst in der Mathe-Bibliothek, welche dazugelinkt werden muss, sind dann die Funktionen tatsächlich implementiert.
Bin zu dumm dafür, ich kriegs nicht hin. Eine Frage hätte ich noch, wenn ich das noch mit -lm verlinken muss, warum geht dann die SQRT() Funktion? Wenn ich math.h rausnehme geht die nicht mehr.
Freshman schrieb: > Bin zu dumm dafür, ich kriegs nicht hin. > > Eine Frage hätte ich noch, wenn ich das noch mit -lm verlinken muss, > warum geht dann die SQRT() Funktion? Wenn ich math.h rausnehme geht die > nicht mehr. Was bedeutet in dem Zusammenhang 'geht'?
Ich kann´s nicht mehr compilieren => ich bekomme einen Fehler für die SQRT Funktion.
Freshman schrieb:
> Ich kann´s nicht mehr compilieren
Siehst du: Compilieren.
Wir reden hier aber gar nicht vom compilieren.
Wir reden vom Linken!
compilieren: Der Vorgang um aus einem *.c File ein File mit
Maschinencode zu machen
linken: Mehrere Maschinencode Files, unter Umständen gemeinsam mit
Bibliotheken, zum eigentlich ausführbaren Programm zusammenmontieren.
Und in deinem Makefile ist dieser Abschnitt
1 | $(TARGET): $(OBJECTS) |
2 | $(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET) |
dafür zuständig. Und unter LIBS solltest du einfach nur die -lm eintragen. Wenn es noch keine Definition für LIBS gibt, dann musst du eben eine machen.
1 | ... |
2 | ## Linker flags |
3 | LDFLAGS = $(COMMON) |
4 | LDFLAGS += -Wl,-Map=Random.map |
5 | |
6 | ## Additional libraries |
7 | LIBS = -lm |
8 | ... |
Freshman schrieb: > Ich kann´s nicht mehr compilieren => ich bekomme einen Fehler für die > SQRT Funktion. Versuch's mal mit der Schreibweise: sqrt (Klein- und Großschreibung wird unterschieden)
Danke für die ausführliche Erklärung. Wenn ich am Montag wieder in der Firma bin werde ich mich sofort über das Make File hermachen. Frohe Weihnachten!!! LG Freshman
Nein, auch wenn ich das Makefile verändere kann ich den log() nicht compilieren. Wenn ich dem log eine bestimmte Zahl zuweise geht es. tmp = 1; tmp2 = log(tmp); HILFE
NÖ Bei solchen Fehlerbeschreibungen wirst du nicht viel Hilfe bekommen. Erstens ist das Forum nicht geeignet, jedem, der anfängt zu programmieren, alle Grundlagen fünfmal zu erklären, die auch in jedem Buch zu finden sind, und zweitens gehört zu einer Frage automatisch auch, wie das nicht funktionierende Programm aussieht, wie übersetzt wird und worin sich der Fehler äußert. "Ich weiß nicht was kompilieren und linken ist, aber mein Programm geht nicht" ist nicht sinnvoll, sondern Zeitverschwendung aller Beteiligten.
Schön, dass Du das so siehst. Wenn es in einem Buch stehen würde, würde ich nicht danach fragen. Wenn ich eine Library einbinde von der ein Befehl (sqrt) funktiniert und der andere nicht (log) ist das für mich sehr eigenartig und sieht nicht nach einem einfachen Problem aus. An das Forum wende ich mich nicht weil mir so langweilig ist oder weil ich Euch beschäftigen will sondern weil ich von Euch immer tolle Tips bekommen habe. Ich bin mir sicher, dass es Bereiche gibt in denen Du dich nicht gut auskennst. Was würdest Du sagen, wenn Dir keiner hift sondern jeder sagt frag mich wenn du auf meinem Niveau bist. Nicht so toll oder? Dennoch danke Freshman
Ich beschwere mich nicht, daß du mit dem log nicht klarkommst. Aber wenn du nicht die Bedeutung von Headerdateien und Objektbibliotheken kennst bzw. den Unterschied dazwischen, hilft ein Buch, bevor man hier sich solche Grundlagen erklären lassen muss. Und zweitens sind deine Fehlerbeschreibungen einfach grottig! > Nein, auch wenn ich das Makefile verändere kann ich den log() nicht > compilieren. Was hast du verändert? Wie sieht das makefile aus? Was heißt "kann nicht kompilieren"? Soll man das raten? -> Zeitverschwendung! Ich weiß z.B. anhand der ganzen bisherigen Beoträge nicht, ob du den log10() selber neu schreiben willst (das wäre "implementieren" nämlich) oder nur verwenden willst (was ich vermute). Soll ich das raten? -> Zeitverschwendung! > Wenn ich dem log eine bestimmte Zahl zuweise geht es. > > tmp = 1; > tmp2 = log(tmp); Wo wird hier dem log eine Zahl zugewiesen? Wenn es so geht, aber anders nicht: wie sieht das "anders" aus, das nicht geht? Wieder raten? -> Zeitverschwendung! Vorhin hieß es noch log10, jetzt log. Was rufst du eigentlich auf? Soll ich das auch raten? -> Zeitverschwendung! Es geht einfach nicht ohne den kompletten Quelltext, die Information wie kompiliert wird (z.B. durch ein hier sichtbares makefile) und einer vernünftigen Beschreibung, was dir nicht gefällt bzw. was nicht geht. Das könnte man eigentlich als bekannt voraussetzen, es wurde dir hier auch schon gesagt und geholfen hat es nichts. Also wird auch dieser Text wieder für die Katz sein. -> Zeitverschwendung!
Du weist schon, dass man ein Magengeschwür bekommen kann wenn man sich zu sehr aufregt. SCHEIßEGAL ob ich log() oder log10() eingebe, es geht nicht. Aber kein Problem, halte Dich nicht damit auf. Wobei, dein letzter Beitrag brachte mich sehr zum schmunzeln. Wie man sich so aufregen kann. Weil Weihnachten ist : Oh Du allwissender der Programierer, der Du noch nie Anfänger warst oder einen Fehler machen würdest. Ich bitte Dich vielmal um Verzeihung. Ich wollte nicht deine wertvolle Zeit verschwenden. Ich wünsche Dir dennoch einen guten Rutsch in´s neue Jahr. Nimm das Leben nicht so schwer. LG Freshman
Ich habe mich noch gar nicht aufgeregt, weiß daß ich alles andere als allwissend bin. Wenn ich mich aufrege, sieht das anders aus; und das wird in einem Forum kaum vorkommen. Ich wollte dir nur klarmachen, daß man so in einem Forum keine Hilfe erwarten kann, nachdem die bisherigen Aufforderungen, Quelltext und makefile zu zeigen nichts halfen (erst von Oliver, dann kurz von mir und dann nochmal ausführlich von mir, Erfolg=0). Sieh es als Hilfe zur Selbsthilfe, oder ignoriere es. Nebenbei: ich habe in meinem Programm hier die Zeile:
1 | while( ( c = _getch())!='q' ) |
Du kannst mir bestimmt sagen, warum mein Garagentor klemmt?
Hast Du es schon geölt? Kann auch an der Kälte liegen. Mein Garagentor will auch nicht wenn es kalt ist. Hast Du es aufgesperrt? ...
Freshman schrieb: > Du weist schon, dass man ein Magengeschwür bekommen kann wenn man sich > zu sehr aufregt. > > SCHEIßEGAL ob ich log() oder log10() eingebe, es geht nicht. Aber kein > Problem, halte Dich nicht damit auf. Haha! [ ] Du hast Klaus Posting gelesen [ ] Du hast Klaus Posting verstanden.
@Freshman WAS GENAU GEHT NICHT??? Kommt eine Fehlermeldung vom Compiler? Wenn ja, WELCHE GENAU? Kommt eine Fehlermeldung vom Linker? Wenn ja, WELCHE GENAU? Oder klappt das Programm auf dem AVR selbst nicht? Wenn ja, WAS GENAU klappt nicht? wird ein falscher wrde berechnet? stürtz das Programm ab? ...? Im ersten Postinig hast du es doch ansatzweise richtig gemacht und die Fehlermeldung angehängt. Das hättest du auch in späteren Postings machen können. Ein komplettes makefile wäre auch sinnvoll, weil man dort den genauen Aufruf des Kompiliers und Linkers rauslesen kann. Machs Dir doch selbst nicht so schwer. Wir sind nicht die, das Problem mit dem log() haben, sondern Du. Mach Dir doch bitte wenigstens die Mühe, die paar Dateien anzuhängen.
Freshman schrieb: > Oh Du allwissender der Programierer, der Du noch nie Anfänger warst oder > einen Fehler machen würdest. Niemand hier ist allwissend. Niemand hier ist zur Welt gekommen und hat das alles beherrscht. Die meisten regulären Helfer hier waren zu einer Zeit Anfänger, als man von so etwas wie einem Internet oder einem weltweiten Forum noch nicht mal träumen konnte. Was haben wir gemacht: Wir haben uns auf den Hintern gesetzt und haben uns durchgebissen. Wir haben gelernt. Wir haben Variationen ausprobiert. Wir haben Fehlermeldungen gelesen, Zig-mal, und uns gefragt was sie wohl bedeuten könnten. Wir haben aus den Fehlermeldungen Hypothesen abgeleitet und sukzessive eine nach der anderen ausgeschlossen bis die eine, die richtige, übrig blieb. Das alles im stillen Kämmerlein oder mit einem Freund zusammen, der auch nicht mehr wusste als wir selber. Unsere Informationsquellen waren Bibliotheken und Zeitschriften. Wir haben jedes Wort gelesen. Jedes Fitzelchen Papier. Mehrmals. Tauchte ein Problem auf und man hatte Glück, dann gab es im Fundus eine Zeitschrift mit einem Artikel, die ein ähnliches Problem beleuchtete. Daraus wurden dann Schlüsse gezogen. Oh, es war keineswegs so, dass von Anfang an alles Sinn machte. Vieles blieb unverständlich. Aber mit der Zeit fügte sich eines zum anderen und irgendwann passte wieder ein Puzzlestück zum Gesamtbild. So haben wir gelernt. Über Jahre hinweg.
Das makefile ist angehängt, die header auch. Was ich mit dem log mache steht auch dabei. Kein Problem, ich hab das Programm einen Informatik Studenten gegeben. 20EUR und er machts. Vermutlich liegt der Fehler an meinem AVR Studio. Bei ihm geht alles. Viel Spaß noch in Eurem stillen Kämmerchen. LG Freshman
Bitteschön, und vielen Dank auch für das schöne makefile.
(In meiner Arroganz kann ich es nicht finden, aber egal.)
Hoffentlich hast du es dem Studenten wenigstens gegeben...
> Vermutlich liegt der Fehler an meinem AVR Studio. Bei ihm geht alles.
Vielleicht doch ein Fehler aus der Rubrik:
"User error - please replace user!"
Ja, Arroganz kann den Blick trüben. Es ist im 3. Eintrag als Anhang. Tut mir leid, dass Du das so siehst. LG Freshman
Um das Ganze wieder gerade zu rücken. Der Karl Heinz hat Dir einen Hinweis gegeben: ... Dein Problem ist nicht irgendein Header File beim Compilieren Dein Problem ist beim Linken die Mathebibliothek. in die Linkerflags im Makefile muss noch ein -lm mit rein (siehe weiter oben angegebenen Link. Dort in der ersten Antwort die letzte Zeile. Schau dir an, wo dort -lm auftaucht) ... Ich bin nicht von der AVR-Fraktion, aber durch nachdenken komme ich zu dem Schluss, dass diese Linker-Datei die einzelnen *.o (erzeugten Objektdateien) gerne einzeln aufführt. Da sehe ich dann in dem Beispiel bei der UART und Main jeweils ein "-lm". Auch sehe ich ein "-lm" am Ende der Zeile. Ich würde nun erst mal abklären, worum es eigentlich geht bei diesem "-lm"; was das macht. Probehalber kannst Du ja mal dieses "-lm" in gleicher Weise ausprobieren. PSoC.
Freshman schrieb: > Ja, Arroganz kann den Blick trüben. Es ist im 3. Eintrag als Anhang. So blind bin ich auch nicht. Aber das war -wie du richtig bemerkst- im dritten Beitrag. Später schreibst du, du hättest das makefile geändert. Was hilft mir die alte Version? Und was hilft mir das ohne die restlichen Quelltexte? Oder ich ich bin wirklich zu doof, sie zu finden. Ich kann es echt kaum glauben, daß jemand so beratungsresistent sein kann. Wie oft muß man dir noch sagen, daß dir niemand helfen kann, wenn du nicht alle nötigen Informationen auf den Tisch legst? Du lässt hier etliche Leute herumrätseln und verschwendest die die Zeit von freiwilligen Helfern, ohne dein Problem vernünftig zu beschreiben und ohne mal alle nötigen Dateien zu zeigen. Und das, obwohl man dich hier schon mehrfach gebeten hat, mal alles auf den Tisch zu legen, was relevant ist. Mein Garagentor klemmt übrigens immer noch. Es liegt daran, daß ein paar Kisten im Weg stehen; Danke für die guten Tips. > > > Tut mir leid, dass Du das so siehst. Wie soll man es sonst sehen? Sollen wir bei dir vorbei fahren und das vor Ort ansehen, damit du nichts posten musst? > > LG > Freshman Guten Rutsch! (Mein Vorsatz fürs nächste Jahr: keinem Gast mehr antworten, das hat sich nicht bewährt.)
Freshman schrieb:
> Du würdest zu mir kommen? cool.
Wenigstens postest du deine dämlichen Kommentare als Gast. Da hast du
noch mal die Chance deinen Namen zu ändern und von Neuem zu starten,
wenn du endlich eingesehen hast, dass es so nicht funktioniert.
Ansonsten tippe ich auch auf den Error mit der ID "Ten T" (ID10T).
Interessant: In der Medizin ist der Begriff „Idiot“ (bzw. Idiotie) als Bezeichnung für einen geistig behinderten Menschen mit einem Intelligenzquotienten unter 20 heute vollständig verschwunden. Mit einem IQ unter 20 hätte ich Dein Zahlenspiel nicht verstenden. Warum sendest du etwas, was der Betreffende nicht lesen könnte. Denk darüber nach. Das Problem wurde übrigens schon gelöst.
2 Dinge würde ich gerne dazu sagen. 1) Wenn Du nur angeben willst und das Problem doch nicht gelöst hast, hier die Lösung: Du sagtest, Du verwendest AVR Studio, Unter Project und dann Properties (oder Settings, ich erinnere mich nicht mehr so genau) kannst du unter Libraries die Libm.a dazugeben. Dann geht es. Ich hatte den selben Fehler. 2) Etwas nicht zu wissen ist kein Problem, etwas nicht zu können auch nicht, Du wirst es schon lernen aber überleg Dir was Du in ein Forum schreibst. Greetings Cyrex
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.