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?
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++.
Vielen Dank, das war's :-) Hier eine gute Zusammenfassung: http://www.cpp-tutor.de/cpp/le07/extern_c.html
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.