mikrocontroller.net

Forum: Compiler & IDEs library erstellung


Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);

Autor: tom (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Mar Vol (marvol)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen Dank

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.