So viel ich gesehen habe, liegt das Problem in w5100.h.
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); \
}
Diese ganzen defines erstellen verschiedene Funktionen (namentlich). Bei jedem einbinden werden diese Funktionen neu erstellt, deshalb schreit der Compiler.
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
Lesezeichen