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?

War es hilfreich?

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 und delete (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üssen malloc() und free() von C 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 startet avr-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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top