Kompileringsfel: "variabel has multiple definitions&quo

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
fatpo83
Inlägg: 282
Blev medlem: 21 april 2004, 22:42:28
Ort: Sthlm

Kompileringsfel: "variabel has multiple definitions&quo

Inlägg av fatpo83 »

När jag kompilerar ett projekt får jag felet: Error - symbol 'dummy' has multiple definitions.

Jag har testat ändra och byta namn på varibeln men får samma fel. Blir helt galen...jag kör C18 med 18f252. Vad beror det på? Har nån tidigare stött på samma problem?
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg av cyr »

Inte speciellt lätt att säga var felet ligger utan källkoden...
fatpo83
Inlägg: 282
Blev medlem: 21 april 2004, 22:42:28
Ort: Sthlm

Inlägg av fatpo83 »

Ok. Jag har zippat hela projektet. Jag har ändrat lite i koden för att komma runt problemet men nu får jag: Error - symbol 'clear_usart_errors_inline' has multiple definitions...alltså samma typfel...jag blir galen....

http://hem.bredband.net/yuspoy/mplab.zip

PS. funktionen finns i serial.c
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg av cyr »

Nu har jag inte C18 tilgänglig att kolla med, men en sak ser väldigt skum ut:

#include "serial.c"

Man brukar inte inkludera c-filer på det sättet, de ska kompileras var för sig och länkas ihop. Om du gör båda delarna så kommer du att ha två kopior av varje sak från serial.c, (den ena i main.c).

edit: och sen undrar jag varför du använder något som verkar vara gammal kod för PIC16F87x, när C18 har utmärkta inbyggda funktioner för att hantera USART på PIC18...
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Det intressanta är (men det vet du väll redan eftersom det framgår av dokumentationen) att detta fel *inte* kommer från C18 kompilatorn, utan från MPLINK.

MPLINK får alltså en "hög" med objekt (*.o) filer där det tydligen finns dubbla definitioner.

Är serial.c också en "source file" i ditt projekt ?

Det skulle förklara felmeddelandet (men "Felet" är #includen).
fatpo83
Inlägg: 282
Blev medlem: 21 april 2004, 22:42:28
Ort: Sthlm

Inlägg av fatpo83 »

OK. Nu har jag tagit bort den och endast kompilerat den för sig, och sen länkat den till projektet. Den gick faktiskt genom...så problemet var det.

Men nu säger den : could not find definition of symbol 'CLRWDT' . Kommer ihåg att jag fick det här meddelandet i mina tidigare projekt också. Är det fel på delayerna eller?

PS. Anledningen till varför jag inte använder C18s inbyggda USART bibliotek är att jag vill lära mig hur man gör det manuellt så att säga. Jag har även kikat på "C18 libraries", och det verkar inte krångligt alls att sätta igång allt med "openUSART"...men som sagt först måste jag få igång det här.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

CLRWDT är en instruktion. Konstigt...
Är det något med definition av procesor modell ?

> "Kommer ihåg att jag fick det här meddelandet i mina tidigare projekt också."

Jahaja ! Och... ? Vad gjorde du då ?? Eller fungerade det ändå ? Gjorde du ingenting ?

> " jag vill lära mig hur man gör det manuellt så att säga."

Vill du göra saker manuellt, ska du köra assembler.
Om du kör C, så är det just för att *slippa* gör saker "manuellt" (men kanske inte förstå lika mycket av vad som händer "under the hood", så att säga). :-)

Du får bestämma dig... :-)

> "Jag har även kikat på "C18 libraries", och det verkar inte krångligt alls att sätta igång allt med "openUSART"

Är det inte enklare att göra det då ?
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Det senare felmeddelanden skulle även kunna vara en .h-fil som inte är inkluderad.
Sök efter CLRWDT bland libraryts (?!) .h-filer.
En gissning borde vara något i stil med watchdog.h?

Mvh
speakman
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

För mig låter det mer som om att "CLRWDT" (som ju är en instruktion) är använd som ett symbol, antagligen för att det är C och där ska man berätta för compilern att man ger assembler kommandon.

CLRWDT är inte en instruktion i C.....
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Hm, en liten fundering; Är det kompilatorn eller linkern som avger felmeddelandet?

Mvh
speakman
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

MPLINK, som jag skrev ett tidigare inlägg...
(Läs tråden ! :-) )

Kolla i manualerna för C18 resp MPLINK, så
hittar du felmeddelandet i MPLINK manualen...

I manualen för C18 saknas det helt.

Det är för övrigt helt logiskt, eftersom det är
länkaren som "översätter" symboliska referenser,
och alltså har anledning att söka efter symbolerna...

/Janne.
Skriv svar