Hast du schon einfach mal in der kompletten Solution nach W5100_RSIZE gesucht und geschaut , dass du es nicht doch doppelt definiert hast. Ansonsten sehen deine Include Guards korrekt aus.
Moin,
ich versuche gerade die Arduino Ethernetbibliotheken in C umzuwandeln weil ich mir dadurch mehr Platz erhoffe.
Jetzt habe ich das Problem, dass ich in der C datei Ethernet.c, EthernetServer.c, EthernetClient.c und socket.c die Headerdatei W5100.h einbinde und habe das Problem das der Compiler (AtmelStudio6) als Fehlermeldung ausgibt " multiple definition of `W5100_RSIZE' ". Ich denke das es daran liegt das ich die Headerdatei mehrmals einbinde.
Wenn ich die Headerdatei nur an einer Stelle einbinde dann
funktioniert es nicht und
hat auch noch nicht den gewünschent Zweck gehabt.Code:#ifndef W5100_H_ #defineW5100_H_ ...Deklarationen... #endif
Hier das Projekt:Ethernetwebserver.zip
Danke schonmal für eure Hilfe.
Thorben
Hast du schon einfach mal in der kompletten Solution nach W5100_RSIZE gesucht und geschaut , dass du es nicht doch doppelt definiert hast. Ansonsten sehen deine Include Guards korrekt aus.
Danke schon mal für deine Antwort.
Das mit "W5100_RSIZE" war nur ein Beispiel
Hier mein ganzer Output:Output.txt
Ich habe schon mal danach gesucht aber keine andere Definition gefunden.
Thobe
EDIT: Es sind ja alle Deklarationen in dem Header betroffen
Geändert von Thorben W (13.02.2014 um 17:26 Uhr)
Include-Guards verhindern das mehrfache Einbinden in ein und dieselbe Datei. Das hat mit deinem Problem nicht das geringste zu tun.Zitat von Thorben W
Und genau dieses "Definitionen" ist hier das Problem. Die gehören nun mal nicht in einen C-Header. Da gehören nur Deklarationen rein.Zitat von Thorben W
Auch wenn das jetzt vielleicht etwas hart klingt, aber das eigentliche Problem scheint mir zu sein, dass du etwas versuchst, zu dem dir schlicht das nötige Grundlagenwissen fehlt.Zitat von Thorben W
MfG
Stefan
Entschuldigung ich bin auch nicht Perfekt habe mich falsch ausgedrückt. Um es klar zu stellen ich meinte die Deklarationen.
Das heißt also, das die Datei von unterschiedlichen Dateien trotzdem mehrfach eingebunden wird?Include-Guards verhindern das mehrfache Einbinden in ein und dieselbe Datei. Das hat mit deinem Problem nicht das geringste zu tun.
Thorben
Es SIND aber Definitionen.Zitat von Thorben W
Natürlich, so muss das auch sein.Zitat von Thorben W
MfG
Stefan
So viel ich gesehen habe, liegt das Problem in w5100.h.
Diese ganzen defines erstellen verschiedene Funktionen (namentlich). Bei jedem einbinden werden diese Funktionen neu erstellt, deshalb schreit der Compiler.Code:#define __GP_REGISTER8(name, address) \ inline void W5100_write##name(uint8_t _data) { \ W5100_write(address, _data); \ } \ inline uint8_t W5100_read##name() { \ return W5100_read(address); \ } #define __GP_REGISTER16(name, address) \ void W5100_write##name(uint16_t _data) { \ W5100_write(address, _data >> 8); \ W5100_write(address+1, _data & 0xFF); \ } \ uint16_t W5100_read##name() { \ uint16_t res = W5100_read(address); \ res = (res << 8) + W5100_read(address + 1); \ return res; \ } #define __GP_REGISTER_N(name, address, size) \ extern uint16_t W5100_writeg##name(uint8_t *_buff) { \ return W5100_writeg(address, _buff, size); \ } \ extern uint16_t W5100_readg##name(uint8_t *_buff) { \ return W5100_readg(address, _buff, size); \ }
Entweder defines rausschmeißen und sauber ausprogrammieren oder die Implementierung in die .c verlagern und in der .h nur die Prototypen erstellen.
Waren auch noch ein paar andere Fehler drin. Das kompiliert zumindest.
mfg
Geändert von Wsk8 (15.02.2014 um 00:23 Uhr)
Lesezeichen