Forum: Mikrocontroller und Digitale Elektronik Arduino - multiple definition of `__vector_18'


von Andreas O. (otti1308)


Lesenswert?

Hallo Forum,

seit geraumer Zeit beschäftige ich mich mit dem Arduinoprojekt, welches 
auf den Atmel-Kontrollern basiert.

Für eine DMX-Receiver-Anwendung hab ich mir nun ein Beispielprojekt 
heruntergeladen, welches vom Autor schon in der Revision 15 vorliegt und 
nach seinen Angaben auch getestet wurde. Hier ein Link zur Seite mit dem 
Code und dem Link zum Projekt:

http://blog.wingedvictorydesign.com/2009/03/20/receive-dmx-512-with-an-arduino/3/

Will ich nun das Projekt ohne Änderungen im SDK des Arduino compilieren, 
bekomme ich folgende Meldung:
1
core.a(HardwareSerial.cpp.o): In function `__vector_18':
2
/Users/andreas/Applications/Arduino/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/HardwareSerial.cpp:81: multiple definition of `__vector_18'
3
receiver_rev15.cpp.o:receiver_rev15.cpp:162: first defined here

Nun hab ich schon einige Zeit mit suchen verbracht und bin jetzt etwas 
ratlos, weil ich keine Lösung finde.

Kann mir jemand von Euch helfen, dem Problem auf den Grund zu gehen?

Liebe Grüße, Andreas

von ... (Gast)


Lesenswert?

Und woher stammt die receiver_rev15.cpp?
Da drin ist eine Interruptroutine definiert die bereits in der im 
verlinkten Projekt enthaltenen HardwareSerial.cpp drin ist. Zwei 
Routinen für den selben Interrupt geht nunmal nicht. Steht doch aber 
alles auch in der Fehlermeldung.

von zagge (Gast)


Lesenswert?

hmm steht doch eh auf der Seite, dass man HardwareSerial.cpp 
modifizieren muss.

One Dumb Hack is necessary: rename your currently installed 
HardwareSerial.cpp file to HardwareSerial.cpp.backup, and put the 
modified HardwareSerial.cpp from this site in the same directory.

von Andreas O. (otti1308)


Lesenswert?

... schrieb:
> Und woher stammt die receiver_rev15.cpp?

..das kann ich leider nicht sagen, weil die Quelldateien keine solche 
Datei aufweisen. Die einzige Dopplung, die ich finde, ist die 
HardwareSerial.cpp im Dateipfad des Projekts. Diese kommt auch im 
Kontext des Arduino Projekts vor. Es gibt aber für jene im Pfad des 
Projektes keinen Include-Befehl.

Zugegeben, es verwirrt mich zunehmend...

> Da drin ist eine Interruptroutine definiert die bereits in der im
> verlinkten Projekt enthaltenen HardwareSerial.cpp drin ist. Zwei
> Routinen für den selben Interrupt geht nunmal nicht. Steht doch aber
> alles auch in der Fehlermeldung.

..Nun ja, ich hab natürlich versucht in den Quelldateien an den 
angegebenen Zeilen etwas entsprechendes zu finden. Leider ohne Erfolg. 
Aber vielleicht hab ich ja auch irgendwas nicht ganz verstanden... :o(

Vielen Dank für das Feedback!!

Andreas

von Andreas O. (otti1308)


Lesenswert?

@zagge: Das scheint der richtige Hinweis zu sein!!

Mein Englisch ist leider eine mittlere Katastrophe und ich lese daher 
nicht sehr viel dieser Informationen durch. Insofern hab ich Euch jetzt 
für meine mangelnden Englischkenntnisse missbraucht. Habt bitte 
Nachsicht mit mir!

Vielen Dank für den Hinweis! Ich probiere das gleich mal aus und 
reflektiere hier im Forum über den Erfolg.

Andreas

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Man kann ja nicht einfach zweimal den selben Interrupt implementieren:

ISR(USART_RX_vect){
usw.

funktioniert natürlich nicht, solange der noch in der normalen 
Bibliothek für serielle Kommunikation implementiert ist. Ob man den 
dazugehörigen Header includiert oder nicht, spielt überhaupt keine 
Rolle. Es werden grundsätzlich alle Sourcen compiliert und erst beim 
Linken festgestellt, was nicht benötigt wird. Dort wird aber zuvor 
festgestellt, dass es zwei Interrupthandler für den gleichen Vektor 
gibt. Also wird abgebrochen.

Grüße,

Peter

von Andreas O. (otti1308)


Lesenswert?

Hallo Forum!!

Der Hinweis von zagge war goldrichtig, ich hab im SDK die Coredatei 
HardwareSerial.cpp nach *.bak umbenannt und die im Projekt enthaltene 
gleichnamige an diese Stelle kopiert.

Compilieren verlief ohne Fehler!!


Herzlichen Dank für Eure Hilfe!! So schnell hab ich noch nicht geholfen 
bekommen... ;o)


Liebe Grüße Andreas

von ... (Gast)


Lesenswert?

Andreas Ott schrieb:
> ... schrieb:
>> Und woher stammt die receiver_rev15.cpp?
>
> ..das kann ich leider nicht sagen, weil die Quelldateien keine solche
> Datei aufweisen.
Dein eigenes Projekt solltest Du schon kennen.
Irgendwo muß die schließlich herkommen, der Compiler meckert die nicht 
umsonst an.

> Die einzige Dopplung, die ich finde, ist die
> HardwareSerial.cpp im Dateipfad des Projekts. Diese kommt auch im
> Kontext des Arduino Projekts vor. Es gibt aber für jene im Pfad des
> Projektes keinen Include-Befehl.

Und was man mit der machen muß hat Dir zagge ja freundlicherweise schon 
hier her kopiert.
Original ist hier:
http://blog.wingedvictorydesign.com/2009/03/20/receive-dmx-512-with-an-arduino/2/
Der Grund steht direkt unter dem kopierten Teil, noch mehr hier:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1236223363/0

von Andreas O. (otti1308)


Lesenswert?

... schrieb:
> Andreas Ott schrieb:
>> ... schrieb:
>>> Und woher stammt die receiver_rev15.cpp?
>>
>> ..das kann ich leider nicht sagen, weil die Quelldateien keine solche
>> Datei aufweisen.
> Dein eigenes Projekt solltest Du schon kennen.
> Irgendwo muß die schließlich herkommen, der Compiler meckert die nicht
> umsonst an.
>
>> Die einzige Dopplung, die ich finde, ist die
>> HardwareSerial.cpp im Dateipfad des Projekts. Diese kommt auch im
>> Kontext des Arduino Projekts vor. Es gibt aber für jene im Pfad des
>> Projektes keinen Include-Befehl.
>
> Und was man mit der machen muß hat Dir zagge ja freundlicherweise schon
> hier her kopiert.
> Original ist hier:
> 
http://blog.wingedvictorydesign.com/2009/03/20/receive-dmx-512-with-an-arduino/2/
> Der Grund steht direkt unter dem kopierten Teil, noch mehr hier:
> http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1236223363/0

@...   ..ja, manchmal sieht man den Wald vor lauter Bäume nicht und 
deswegen finde ich so ein Forum wunderbar. Man kann sich gegenseitig die 
Bäume zeigen.
Ich bin mir sicher, dass Du ebenfalls schon auf der Suche warst und 
hinterher auch ganz froh über jenen Umstand - also den mit den Bäumen 
mein ich...  ;o)

Wirklich herzlichen Dank für Eure schnelle Hilfe und für das Verständnis 
zu  meiner mangelhaften Sprachbegabung.

Gruß Andreas

von Alex V. (Firma: sanya123) (sanyavlasov12345)


Lesenswert?

zagge schrieb:
> hmm steht doch eh auf der Seite, dass man HardwareSerial.cpp
> modifizieren muss.
>
> One Dumb Hack is necessary: rename your currently installed
> HardwareSerial.cpp file to HardwareSerial.cpp.backup, and put the
> modified HardwareSerial.cpp from this site in the same directory.

Where is modified HardwareSerial.cpp dowload????? Sign me, please!!!!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.