Grundaufbau eines Projekts mit Arduino: multiple definition of 'xy'

#4482135
Lesenswert?

Ich will gerne ein recht großes AVR-Projekt auf einen ESP8266 portieren 
und verwende dazu die Arduino IDE. Ich mag allerdings gar nicht mit so 
vielen .ino-Dateien umzugehen, da ich das Prinzip davon nicht so 
wirklich verstehe. Stattdessen arbeite ich lieber mit den altbekannten 
.c- und .h-Dateien. Dabei bekomme ich nun leider jetzt sehr viele Fehler 
und kann das Programm nicht erfolgreich kompilieren.

Ich habe eine .ino-Datei, über die ich meine header-Dateien einbinde 
über folgenden Code:
1
extern "C"
2
{
3
  #include "user_interface.h"
4
  #include "rgbcube.h"
5
  #include "tlc5947.h"
6
  #include "timer.h"
7
}

In jeder header-Datei verwende ich einen include-Guard der Form

1
#ifndef _TIMER_H
2
#define _TIMER_H
3

4
#include <Arduino.h>
5
[...]
6

7
#endif

In der entsprechenden c-Datei binde ich dann die zugehörige header-Datei 
ganz normal mit #include "timer.h" ein.

Die verschiedenen c-Dateien benutzen allerdings teilweise Funktionen aus 
den jeweils anderen Dateien, wobei es zu Überkreuzungen kommt. Also 1.c 
benutzt eine Funktion von 2.c und 2.c eine Funktion von 1.c. Das sollte 
doch an sich kein Problem sein, oder? Dafür sind ja die header-Dateien 
mit include-Guards gedacht, denke ich.

Wenn ich das Projekt allerdings dann kompiliere, bekomme ich Fehler der 
Art:

1
sketch\timer.cpp.o:(.bss.counter+0x0): multiple definition of `counter'
2

3
sketch\main.ino.cpp.o:(.bss.counter+0x0): first defined here

Davon erhalte ich dann so um die 10 Varianten mit verschiedenen 
Funktionen und Variablen.

Ich habe mich zuvor nie wirklich an die c-Konventionen gehalten 
bezüglich includen von header-Dateien. Zum Beispiel habe ich zuvor immer 
die c-Dateien includet, was man ja nicht machen soll. Aber jetzt will 
ich es gerne mal korrekt machen und nichts klappt. :(

Über eure Hilfe wäre ich wirklich sehr dankbar!

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