PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C-Programm in C-Programm einbinden?



Roberto
08.08.2007, 22:12
Hallo wissende ;-)

Ich hätte da mal wieder ein Frage:

Ich habe jetzt ein funktionierendes C-Programm (CodeVision)
(nennen wir es "LCD")
und möchte das jetzt so umschreiben, dass ich es zu einem anderen C-Programm dazugeben kann (linken oder wie das heisst..?)

Von dem Hauptprogramm möchte ich gerne das "LCD" mit einem Funktionsaufruf aufrufen (also nur die Funktion mit Übergabe)

Jetzt frage ich mich:
Ich habe im LCD jetzt die main Funktion. Die kann ich vermutlich streichen :-k

Dann habe ich da im "LCD" noch Include Sachen.
Kann ich die im "LCD" lassen? werden eventuell dann doppelt angegeben?
Im Hauptprogramm und im LCD ?!

Die Variablen vom LCD würde ich statt global in den Funktionen deklarieren.

Dann habe ich noch globale Define Deklarationen.
Wie muss ich die angeben?


Habt ihr da bitte ein paar Tipps, auf was man so aufpassen muss?

l.G. Roberto

izaseba
08.08.2007, 22:36
Hallo Roberto,
Da das Thema ziemlich umfangreich ist, fange ich mal so an:
Du hast ein paar Funktionen, die das LCD steuern z.B.

void lcd_init(void);
void lcd_put_string(int x,int y,char *text);

so, dazu brauchst Du eine *.c Datei und eine *.h Datei z.B. lcd.c u. lcd.h
im lcd.h komen Deine Prototypen in etwa so:


#ifndef _LCD_H_
#define _LCD_H_
void lcd_init(void);
void lcd_put_string(int ,int ,char *);
#endif /*_LCD_H_*/

in lcd.c kommen dann die Funktionen rein


#include "lcd.h"
void lcd_init(void){
...
...
...
}
void lcd_put_string(int x,int y,char *text){
...
...
...
}

in Deiner Hauptdatei includest Du die lcd.h und kannst auf Deine Funktionen zugreifen.
Die lcd.c muß extra übersetzt und zu Deiner Hauptdatei gelinkt werden, wie das bei CV allerdings geht mußt Du selber rausfinden ;-)
Was die Präprozessordirektiven #ifndef usw. zu sagen haben läßt sich sicher ziemlich schnell ergooglen...

Gruß Sebastian

Roberto
09.08.2007, 10:13
Hallo Sebastian
Danke für die schnelle Antwort :-)
Werde mal probieren :-)

l.G. Roberto

Ps.:
Hurraaaaaa \:D/ \:D/
Inzwischen funktioniert es :-)
Ein bisschen anders als Du beschrieben, aber es funktioniert :-)

Ps.:
Irgendwie könnte man schon eine eigene Rubrik für CodeVision aufmachen ;-)

wkrug
09.08.2007, 15:00
Wie gehts denn bei CodeVision ?

Würde mich auch interessieren.

izaseba
09.08.2007, 15:26
Wie gehts denn bei CodeVision ?

Würde mich auch interessieren.

Eben, ich auch wissen wollen ;-)
Ich kann mir vorstellen, daß der Kompiler von alleine erkennt, daß da noch eine *.c/*.h vorliegt und die von alleine mitübersetzt/linkt...
ich hoffe, das dieses "anders als ich beschrieben habe" nichts mit *.c includen zu tun hat...
Es hat schon hier genug Leute gegeben, die *.c includen und nicht verstehen wollen, daß es falch ist
Bitte,bitte sag mir, daß Du nicht dazugehörst ;-)

Gruß Sebastian

Roberto
09.08.2007, 20:17
Hallo

Eben, ich auch wissen wollen Zwinkern
Ah, doch ? :-)

Ich wollte Euch nur nicht am Wecker gehen :-)

Also: (Lib_Name = der Name der Dateien)

* CodeVision neu aufmachen.
* Open New Source
* In dieses dann reinschreiben:

-----------------------------------------
#pragma used+

Hier die Protopypen Deklaration reinschreiben

#pragma used-
#pragma library Lib_Name.lib
------------------------------------------

Diese Daten dann als Lib_Name.h abspeichern

Dann:
C Programm öffnen, oder halt neu anlegen.
(z.B. Lib_Name.c)

Dann sind beide Files im CodeVision

Dann gibt es einen Befehl unter: File/Convert to Library
Mit diesem dann die Lib speichern.

Die Lib wird dann erzeugt (aus dem C-File) und in das Verzeichnis von CodeVision kopiert (Lib-Verzeichniss)

Das .h File war noch im Projekt Ordner, dass habe ich dann auch in den Ordner von CodVison kopiert wo die .h drinnen sind.

Dadurch brauchte ich dann nur #Include <Lib_Name.h> angeben.
Vermutlich funktioniert das auch mit den "" in einem anderen Verzeichniss.
Habe ich aber noch nicht probiert..

Habe die originalen Lib's (.h) durchgeschaut.
Da gibt es immer nur .lib und .h Files

l.G. Roberto

Roberto
09.08.2007, 23:26
Nochwas:

Habe gemerkt, dass wenn ich Variablen in der Lib, Global definiere, ich sie im C-Programm (Hauptprogramm) nicht mehr verwenden darf (Doppelbelegung)
Jetzt schreibe ich gerade alle in der Lib auf Lokale Variablen um.

Leider ausser zwei, die müssen in der Lib Global bleiben...
(ausser ich finde da noch einen Trick)

Habt ihr vielleicht ein paar Tipps zu solchen Sachen?

In der Lib habe ich manche Ausgänge mit #define deklariert (Bit weise)
Möchte das aber natürlich Universal machen.... :-k
Jetzt frage ich mich, ob ich diese #define in der Lib löschen kann und diese stattdessen im c-Programm machen kann.


Dann habe ich auch noch die Datenrichtungsregister die derzeit alle auf 255 liegen.
Das müsste ich auch irgendwie noch universal machen, weil von einem Port brauche ich nur die hälfte.

Also falls Ihr Tipps dazu habt, oder vielleicht Beispiele und sie Preis geben wollt, nur her damit ;-)

l.G. Roberto