Hi Leute, habe ne frage bezüglich der erstellung einer Library. Also ich bau gerade eine lib für ein display jetzt hab ich für die kommunikation zwischen display und uC in meinem fall SPI noch readSPI writeSPI funktionen und wait/delay funktionen die aber nicht in der Lib enthalten sind. Wie muss ich jetzt vorgehen um diese funktionen später in der aplikation zu definieren? macht man das mit funktionszeigern oder Defines oder doch anders brauche dringend rat!
tom schrieb: > Hi Leute, > habe ne frage bezüglich der erstellung einer Library. Also ich bau > gerade eine lib für ein display jetzt hab ich für die kommunikation > zwischen display und uC in meinem fall SPI noch readSPI writeSPI > funktionen und wait/delay funktionen die aber nicht in der Lib enthalten > sind. Wie muss ich jetzt vorgehen um diese funktionen später in der > aplikation zu definieren? Header File erstellen. So wie man eben vorgeht, wenn man einen Source Code in mehrere Source Files aufteilt. > macht man das mit funktionszeigern oder Defines oder doch anders brauche > dringend rat! nichts von alledem. Du brauchst vor allen Dingen dringend ein C-Buch. Baust du eine echte Object-Library oder teilst du den Code einfach nur in mehrere Source Code Teile auf?
okay, ih glaube ich habe es nicht richtig schildern können, angenommen ich hab ne datei display.c mit folgendem inhalt: include "display.h" void lcd1(void) { .... } void lcd2(void) { .... a = getTime(); } void lcd3(void) { b=readSPI (adresse,länge); .... } so jetzt will ich ne lib draus machen.Frage jetzt: Wie kriegt die lib die funktionen readSPI(char adresse, char länge) und void getTime(void);
tom schrieb: > so jetzt will ich ne lib draus machen. Und nachmal die Frage. Was genau verstehst du unter Lib. Auf einem Desktoprechner ist die Sache klar. Compilier die Einzelteile und stell sie mit dem Librarien zu einer Lib zusammen. Aber auf den hier gebräuchlichen µC wird der Begriff 'Library' auch gerne anders verwendet und hat mit dem was man gemeinhin unter einer Library versteht nichts zu tun. > Wie kriegt die lib die funktionen readSPI(char adresse, char länge) > und void getTime(void); Die braucht sie nicht. Genau deswegen erfolgt das Erstellen eines kompletten Programms in 2 Schritten. Erst werden die Source Code Files zu Object Code (Maschinencode) compiliert. Und erst dann werden die einzelnen Object Code Teile zusammen mit Libraries zum kompletten Programm zusammengelinkt. Erst im Linkerschritt müssen dann tatsächlich alle Einzelteile vorhanden sein. Selbst wenn ich jetzt davon ausgehe, dass du eine tatsächliche Object-Library baust, ist es für die Library kein Problem, wenn einzelne Teile fehlen, denn die Library selbst muss nicht in sich vollständig sein. Sie ist ja nur eine Zutat, aus der der Linker dann das Programm zusammenbaut. Der Prozess des Erstellens einer echten Object-Library erfolgt aber nach dem Erstellen der Object Code Files. Eine Library ist in dieser hinsicht einfach nur ein Container, in dem mehrere compilierte Object Files hineinkopiert werden und aus der sich der Linker die Teile holen kann, die er benötigt. Im 2 stufigen Erstellungsprozesses sitzt das Erstellen einer Lib als genau in der Mitte, zwischen Compilieren und Linken.
tom schrieb: > so jetzt will ich ne lib draus machen. tom schrieb: > noch etwas das soll ein object file sein wenns dann so heisst also > display.a Was denn jetzt? Eine Library ist etwas anderses als ein Objektfile.
tom schrieb: > noch etwas das soll ein object file sein wenns dann so heisst also > display.a Ich denke du meinst eine Object-Library. Also das was mit dem Begriff 'Library' im eigentlichen Sinne verstanden wird. Dein Werkzeug dazu heist avr-ar Und nein, die Library sollte nicht display.a heissen, sondern libdisplay.a Du compilierst die einzelnen C-Files wie gehabt und anschliessend stellst du sie mit dem avr-ar in die library. Beim verwendenden Programm wird dann noch angegeben, dass es eine Library libdisplay.a gibt, die auch zum Projekt dazugehört.
erstmal danke für die Antworten. ich versuche lib zu bauen nach folgender Anleitung: http://www.mikrocontroller.net/articles/Libraries Also angenommen ich baue die libdisplay.a die benötigt ja jetzt die readSPI(char adresse, char länge) und void getTime(void) funktionen. woher weiss jetzt der Anwender dieser lib das diese funktionen benötigt werden?
Hallo. Die Funktionen readSPI(char adresse, char länge) und void getTime(void) sind doch in einer anderen Library (z.B. keineAhnung.h) definiert, diese solltest Du dann in Deiner Headerdatei display.h einbinden: #include "keineAhnung.h" // readSPI & getTime extern void lcd1(void); extern void lcd2(void); extern void lcd3(void); In dem Fall mußt Du aber im Makefile die Lib "keineAhnung.a" miteinbinden. In dem Mainfile kommt dann nur noch: # include "display.h" // void main(void) { ... } Der Benutzer muss dann selbst die Headerfiles prüfen, und die erforderliche Libs einbinden. Ich versuche dies zu vermeiden, wenn es keine Standardlibs sind und kopiere mir einfach den Code aus den anderen Libs raus und verwende diesen in der eigenen Lib -- dies ist eben der Vorteil von Opensource. Ich hoffe Deine Frage richtig verstanden zu haben. Gruß Marvol
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.