Forum: Compiler & IDEs include I2C Bibliothek


von franzlst (Gast)


Lesenswert?

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

von Elektrikser (Gast)


Lesenswert?

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.

von Ulrich (Gast)


Lesenswert?

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.

von franzlst (Gast)


Lesenswert?

@ 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

von Ulrich (Gast)


Lesenswert?

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

von franzlst (Gast)


Lesenswert?

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

von Oliver (Gast)


Lesenswert?

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

von franzlst (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.