Arduino C ++ Code: können Sie virtuelle Funktionen und Ausnahmen verwenden?
-
19-08-2019 - |
Frage
diesen Kommentar von der Frage Schreiben Firmware: Montag oder hohe Niveau :
Wenn C ++ Code kompiliert für den Arduino Plattform, können Sie virtuelle Funktionen verwenden, Ausnahmen, etc? Oder wollen Sie wollen (müssen), verwenden, um eine Teilmenge von C ++ (wie in beschrieben Kommentar )?
Jede andere Einschränkungen bei der Programmierung für die Arduino-Plattform?
Lösung
Die Arduino-Umgebung verwendet die AVR-Version des GCC-Toolchain. Der Code wird als C ++ kompiliert wird, so dass Sie Klassen verwenden können. Virtuelle Funktionen sind möglich; die vtables werden die richtigen Adressen im .data Schnitt und gespeichert werden. In der Tat verwendet die Druckbasisklasse virtuelle Funktionen, die verschiedenen „print“ Methoden zu den verschiedenen Ausgangstypen anzupassen.
Ausnahmen sind nicht wegen der Code Platzgründen unterstützt. Die Arduino-Umgebung geht „-fno-Ausnahmen“, um die Compiler-Befehlszeile. Siehe die Quelle zur Überprüfung dieser .
Vorlagen werden unterstützt. Zum Beispiel dieser nicht-Cost-Strom-Operator Technik fein mit einer einfachen Schablone und Inline-Operator funktioniert.
Andere Tipps
Die Arduino Software verwendet avr-gcc Skizzen zu kompilieren. Die folgenden Einschränkungen wurden stammen aus dem avrlibc FAQ (Kann ich C ++ verwenden, auf die AVR) :
Unterstützt
- Virtuelle Funktionen
- Konstruktoren und Destruktoren (einschließlich global sind)
Nicht unterstützt
- C ++ Standard-Funktionen, Klassen und Template-Klassen (siehe aber dieser Port von uClibc ++ für Arduino )
- Betreiber
new
unddelete
(versuchen, sie zu verwenden, um den Linker zu bemängeln undefined externe Referenzen verursachen). Dies bedeutet, dass Objekte können nur auf dem Stapel erstellt werden. Wenn die dynamische Speicherzuordnung erforderlich ist, umgesetzt werden müssenmalloc()
undfree()
vonC
Typen mit - Ausnahmen. Da Ausnahmen standardmäßig in dem C ++ Frontend aktiviert sind, müssen sie explizit in den Compiler-Optionen mit
-fno-exceptions
ausgeschaltet werden. Dies wird automatisch von dem Arduino IDE gemacht, wenn es startetavr-gcc
Weitere Themen
- Einige der mitgelieferten Include-Dateien sind nicht C ++ sicher, das heißt, sie mit
extern "C" { . . . }
gewickelt werden müssen,
Die Verwendbarkeit eines Feature ist nicht von der Plattform beschränkt, sondern die Compiler, die Sie verwenden.
Ich würde überprüfen Sie Ihre Compiler-Dokumentation auf welcher Sprache Funktionen werden unterstützt.
Comeau Computing eine C ++ hat zu C-Compiler, der alle C ++ Funktionen unterstützt. Nicht nur virtuelle Funktionen oder Ausnahmen, sondern auch den Export. Sie müssten Comeau anrufen, um es der Arduino Sprache Ziel zu erreichen, sollte aber nicht zu hart sein.
Die Dokumentation sagt:
Die Arduino Sprache basiert auf C / C ++ und unterstützt alle Standard-C-Konstrukte und einige C ++ Funktionen.
Es sagt nichts über virtuelle Funktionen, die ich finden kann.
Ich habe versucht, ein einfaches Programm, und es kompiliert in Ordnung. Ich habe es nicht auf Arduino Hardware obwohl getestet.
EDIT:. Ich habe auch nicht getestet Ausnahmen
Früher habe ich g ++ mit dieses Makefile und begann mit dieser Code . C ++ Abfälle etwas Platz. Aber Protothread ist zu kühlen nicht zu verwenden.