Moin, ich benutze das AVR Studio (4.12) und möchte nun in meinem Projekt mit I2C arbeiten. Dankenswerterweise gibt es dazu ja die I2C Bibliothek von Peter Fleury: http://homepage.hispeed.ch/peterfleury/avr-software.html#libs Diese habe ich mir nun heruntergeladen und in das WinAVR Includeverzeichnis kopiert: [...]WinAVR\avr\include\i2cmaster In meiner (bis jetzt) einzigen C-Datei steht im Kopf: #include <i2cmaster/i2cmaster.h> Hier stehen bereits weitere Includes, die sich im selben Mutterverzeichnis befinden: #include <avr/io.h> #include <avr/interrupt.h> #include <stdint.h> #include <math.h> #include <util/delay.h> Nun möchte ich von den neuen Funktionen Gebrauch machen: i2c_init(); i2c_start_wait(DISPLAY + I2C_WRITE); [...] Nur bringt mir AVR-Studio beim builden die Fehlermeldungen, dass diese Funktionen eine undefinierte Referenz sind. ../Roboterfunktionen.c:458: undefined reference to `i2c_init' usw. Warum findet der Compiler die Funktionen nicht? Bei den anderen .h Dateien klappts doch auch?! Muss ich dem Compiler vllt noch irgendwelche Angaben über die .S-Datei machen? Wenn ja, wie? Vielen Dank Franz
Taucht die i2cmaster.h im AVRStudio in deinem Projekt unter Header Files oder External Dependencies auf? Ich vermute, dass du sie ins Projekt mit einbinden musst, da sie nicht Winavr Standard sind.
wo hast du die *.c Datei hinkopiert? Fact ist das er die *.h Datei auf jedenfall gefunden hat. Sonst würde sich der compiler und nicht der Linker beschweren. (Oder gibts noch andere Fehlermeldungen falls ja bitte komplett posten) Also Musst du dem Linker mitteilen wo die libary oder die *.o Datei ist, damit er die verwendeten Funktionen zu deinem Projekt dazulinken kann.
@ Elektrikser: Die Headerdatei erscheint wie auch die anderen im Ordner "External Dependencies". Ich hab jetzt auch schon versucht, das komplette Verzeichnis ins Prejektverzeichnis zu kopieren und dann per #include "i2cmaster/i2cmaster.h" einzubinden, kommen die gleichen Fehler. @ Ulrich: Ich habe das komplette Verzeichnis inclusive der .S, .c, makefiles etc hinkopiert. Es existiert keinerlei *.o oder *.a Datei, die ich einbinden könnte, lediglich besagte .S Datei (die die Assembleranweisungen enthält). Auch i2cmaster.c gibts nicht, nur twimaster.c Muss ich diese .S Datei irgendwie einbinden, und wenn wie? Schonmal danke für die schnellen Antworten Franz
ich würde mal das makefile wo bei der libary dabei ist durchlaufen lassen. Dadurch müssten *.o Dateien entstehen. Das inlcudieren der *.h Datei ist soweit korrekt und wird ja auch gefunden. Du musst jetzt nur noch dem Linker mitteilen das es in dem includeverzeichnis noch *.o Dateien gibt die er beachten muss. Also irgendwo ins makefile noch den Pfad zu dem objekt im includeverzeichnis. PS: Ich mache das mit so bibliotheken immer anders. Ich kopiere mir alle dateien die ich benötige in einen Unterordner im Projektordner. Das hat den Vorteil das ich meine Projekte auf jedem Rechner compilieren kann sei es unter Linux oder Windows. Da muss man dann nix mehr anpassen. Mfg Ulrich
Ich habe es tatsächlich geschafft, über i2cmaster.h das beigelieferte makefile laufen zu lassen (mit WinAVR ging das sogar richtig leicht!) :D Jetzt hae ich also in meine Ordner i2cmaster (immer noch im Projektverzeichnis) die .o Datei, inclusive divereser weiterer vom makefile erzeugter Dateien. Ich hoffe, dass es meine letzte Frage bleiben wird, wie ich diese nun dem Linker mitteile. Direkten Zugriff auf das makefile hab ich in AVR-Studio ja glaub ich nicht, nur das Menü "Configuration Options". Im Library Register habe ich den Pfad zum i2cmaster Ordner angegeben, tatsächlich erscheint im darunterliegenden "Available Link Objects" Feld die Datei i2cmaster.o. Ein Klick auf den Pfeil nach rechts verschiebt den Eintarg in "Link With These Objects". Soweit klingt das ja alles sehr vielversprechend. Beim Versuch zu builden erscheinen allerdings wieder die gleichen Fehlermeldungen, Das komische ist auch, das die i2cmaster.o Datei wieder aus dem Feld "Link With These Objects" ausgetragen ist, wenn ich in das Menü gehe. Ich hoffe ihr könnt mir weiterhin noch so kompetente Hilfe leisten :) Danke Franz
Wenn du AVR-Studio benutzt, vergiss zunächst alles über makefiles, compiler, und linker. Das übernimt das Studio alles für dich. Ausserdem verwechselst du object-files (*.o) und librarys (*.a). Du hast keine library, und daher kannst du auch in den linker-optionen nichts sinnvolles einstellen. So gehts: Du legst im AVR-Studio ein Projekt an. Im linken Fenster rechts-klickst du auf den Order "source files" und wählst "add exsisting source file". Da wählst du dann entweder i2cmaster.s oder twimaster.c aus. Dein Projekt besteht jetzt aus deinem Programmfile und der Source-Datei von Peter Fleury. Jetzt noch "Build" angewählt, den Rest macht das Studio. Fertig. Oliver
Wahnsinn! Vielen Dank Oliver, es klappt. Auch nochmal danke an die anderen, die mir versucht haben zu helfen. Franz
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.