www.mikrocontroller.net

Forum: Compiler & IDEs Studio + WinAVR, 2 alternative LCD Treiber wie?


Autor: Ingo Stahl (ingo-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich benutze in meinem Projekt 2 alternative LCD Treiber, die in 
getrennten Unterverzeichnisisen liegen, sie haben den gleichen 
Dateinamen (Lcd.c/h) und natürlich die gleichen extern Funktionsnamen.
Bei beiden Versionen ist der Inhalt mit cond. compiling gesteuert. Das 
funktioniert auch alles, die Auswahl erfolgt über die Project 
Configurations die dann ein entsprechendes define für die jeweilige 
Version enthält.

Das Problem ist aber, ich darf in den Project Einstellungen nicht die 
Files von beiden Versionen gleichzeitig hereinnehmen. Ich muss immer die 
Files der unbenutzten Version heraus nehmen.
Versuche das über die include directories zu steuern hat keinen Erfolg 
gebracht. Kann das Studio das eventuell nicht handeln oder habe ich da 
einen Fehler gemacht?

Gruß Ingo

Autor: Marius Wensing (mw1987)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wäre es, wenn du die Auswahl über nen Präprozessor-Switch machst und 
dann einfach ein
#ifndef USE_LCD1

nimmst.

MfG
Marius

Autor: Ingo Stahl (ingo-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Markus,
das habe ich ja mit "Inhalt mit cond. compiling gesteuert" gemeint und 
auch gemacht. Die Probleme treten erst beim Linker auf mit "multiple 
definition" auf. Der Linker nimmt wohl die object files von beiden 
Versionen.

Gruß Ingo

Autor: !Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das klingt logisch, wenn du beide Dateien ins Projekt einbeziehst werden 
beide compiliert und der Linker versucht dann natürlich beide in der 
.hex-Datei unterzubringen. Das bläht letztere auf bzw. erzeugt 
Linkerfehler bei gleichen Namen.

Eine andere Lösung als "nur eine der beiden Versionen zum Projekt 
hinzufügen" sehe ich nicht. Vielleicht lässt sich die Kommandozeile vom 
Linkeraufruf beeinflussen, aber das ist was für die Profis.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#ifdef USE_LCD1
 #undef USE_LCD2

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ingo Stahl schrieb:
> das habe ich ja mit "Inhalt mit cond. compiling gesteuert" gemeint und
> auch gemacht. Die Probleme treten erst beim Linker auf mit "multiple
> definition" auf.

Was genau hast du denn gemacht?

Wenn du das beide C-Files jeweils komplett mit #ifdef XX/YY .. #endif 
umgibst, sieht der linker immer nur ein File, das andere ist jeweils 
"leer". Dann gibt es auch keine multiple definitions.

Oliver

Autor: Ingo Stahl (ingo-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Oliver,

ja beide sind mit #ifdef XX/YY .. #endif inclusiver der Header Files 
umgeben. Der Compiler versucht natürlich alles zu compilieren, da ist 
aber nichts drin. Wenn ich die object files im zugehörigen Output Pfad 
lösche bleiben die auch leer.
Wenn ich mir die Fehlermeldung ansehe, scheint es so auszusehen, als ob 
der Linker zweimal darüber geht. first definition und multiple 
definition zeigen auf die gleiche Stelle.

lcd.o: In function `lcd_command':
C:\Dev_AVR\winAVR\SetUp_Boxen\SensorRobbeBox\default/../LcdLib/lcd.c:358 
:  multiple definition of `lcd_command'
Lcd.o:C:\Dev_AVR\winAVR\SetUp_Boxen\SensorRobbeBox\default/../LcdLib/lcd 
.c:358:  first defined here
... und weitere

die Fehlermeldung kommt praktisch für alle als extern deklarierten 
Funktionen.

Gruß Ingo

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

Bewertung
0 lesenswert
nicht lesenswert
Sieht so aus, als ob da die Pfadangaben im Makefile 
durcheinandergekommen wären.

Ich probier das jetzt mal aus

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

Bewertung
0 lesenswert
nicht lesenswert
Also

Das klappt bei mir genauso, wie wir uns das vorgestellt haben.
Womit AVR-Studio überhaupt keine Freude hat, ist, wenn die *.c bzw *.h 
Files gleich heissen. Da kommt dann einiges im Makefile durcheinander.
ABer nachdem ich die Dateien auch Namensmässig sauber getrennt habe, 
wars kein Problem mehr. Ich kann mit einer Compiler Option in den 
Project Settings zwischen den Files/Funktionen hin und her schalten.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Und hier mein Testprojekt dazu

Wenn ich den Dateien auf den Subverzeichnissen gleiche Namen gebe 
(lcd.c/lcd.h anstelle von lcd1.c/lcd1.h bzw lcd2.c/lcd2.h), dann gibts 
Ärger.

Autor: Ingo Stahl (ingo-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super,
vielen Dank für den Tipp, das probiere ich morgen direkt mal aus. Jetzt 
gehts erst mal ins Bett -)

Gruß Ingo

Autor: Ingo Stahl (ingo-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Karl Heinz,

funktioniert einwandfrei!

Nochmals vielen Dank

Gruß Ingo

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.