Studio + WinAVR, 2 alternative LCD Treiber wie?

OP #2032774
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
Gast #2032849
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.
Gast #2033051
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
OP #2033169
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
#2033186
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren