Forum: Compiler & IDEs library erstellung


von tom (Gast)


Lesenswert?

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!

von Karl H. (kbuchegg)


Lesenswert?

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?

von tom (Gast)


Lesenswert?

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);

von tom (Gast)


Lesenswert?

noch etwas das soll ein object file sein wenns dann so heisst also 
display.a

von Karl H. (kbuchegg)


Lesenswert?

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.

von Klaus W. (mfgkw)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von tom (Gast)


Lesenswert?

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?

von Mar V. (marvol)


Lesenswert?

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

von tom (Gast)


Lesenswert?

vielen Dank

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.