Forum: Mikrocontroller und Digitale Elektronik Arduino: multiple files in der 1.0 IDE


von chris (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

seit zwei Tagen versuche ich herauszubekommen, wie man mehrere Files mit 
der Arduino-IDE compilieren kann. Im Anhang habe ich das einfaches 
Beispiel. Obwohl das Headerfile eingebunden ist, wird die 
test()-Funktion nicht gefunden. Hat irgend jemand eine Idee?

von Krapao (Gast)


Lesenswert?

Deine test() ist in einem C-Quellcode definiert (Endung .c) und wird 
daher auch als C-Funktion übersetzt. Du sie deshalb in anderen 
Sourcefiles über das Includefile als C Funktion bekanntmachen.
1
extern "C" void test(void);
2
//     ^^^

Ohne diese Kennzeichnung wird beim Aufruf der Code und interner 
Symbolname für eine C++ Funktion erzeugt, bei der Definition aber der 
Code und interner Symbolname für eine C Funktion. Der Linker 
unterscheidet die aber genaustens und meldet, dass die C++ Funktion 
test() nirgends definiert ist.

Wenn du das nicht möchtest, benutze statt .c und .h die .cpp und .hpp 
Dateiendungen und arbeite durchgehend in C++.

von chris (Gast)


Lesenswert?

Vielen Dank, das war's :-)

Hier eine gute Zusammenfassung:
http://www.cpp-tutor.de/cpp/le07/extern_c.html

von chris (Gast)


Lesenswert?

Es ist mir noch ein neues Problem aufgefallen: Im cpp-Teil gibt es die 
Arduinofunktion

Serial.println("xyz");

In den C-Teilen kann ich diese aber nicht verwenden. Gibt es eine 
Möglichkeit, aus dem C-Teil eine Ausgabe auf die Serielle Schnittstele 
zu machen?

von was? (Gast)


Lesenswert?

chris schrieb:
> Gibt es eine
> Möglichkeit, aus dem C-Teil eine Ausgabe auf die Serielle Schnittstele
> zu machen?

Um die C++ Funktionen in C aufrufen zu können, müsstest du einen Wrapper 
schreiben.

Krapao schrieb:
> und arbeite durchgehend in C++.

Das wäre das Einfachste.

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.