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!!!!!!!!!
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'?
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
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.
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?
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!"
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