- LiFePO4 Speicher Test         
Ergebnis 1 bis 7 von 7

Thema: C-Programm in C-Programm einbinden?

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    57
    Beiträge
    576

    C-Programm in C-Programm einbinden?

    Anzeige

    Praxistest und DIY Projekte
    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

    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

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    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:
    Code:
    #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
    Code:
    #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
    Software is like s e x: its better when its free.
    Linus Torvald

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    57
    Beiträge
    576
    Hallo Sebastian
    Danke für die schnelle Antwort
    Werde mal probieren

    l.G. Roberto

    Ps.:
    Hurraaaaaa \/ \/
    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

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.187
    Wie gehts denn bei CodeVision ?

    Würde mich auch interessieren.

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    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
    Software is like s e x: its better when its free.
    Linus Torvald

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    57
    Beiträge
    576
    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

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    57
    Beiträge
    576
    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....
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus