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!