C ++ gegen die Arduino-Sprache?


81

Was sind die Vorteile jeder Sprache bei der Verwendung des Arduino?

Ich denke, das ist eine gute allgemeine Frage, aber ich füge ein bisschen hinzu, warum ich frage, ob mir jemand einen Tipp geben möchte.

Ich habe Erfahrung mit vorverarbeiteten Sprachen wie JavaScript und PHP und habe mit Sprachen wie Java und Visual Basic experimentiert. Mit anderen Worten, ich kenne Programmiertechniken und sowohl klassische als auch prototypische Objektorientierung, aber nichts davon, direkt mit Hardware zu kommunizieren.

Ich mache einen Oktokopter und denke, dass ein objektorientierter Ansatz am einfachsten sein wird. (Die Software wird sehr viele Funktionen haben ...) Allerdings habe ich noch nie in C ++ geschrieben.

Da dies eine Q & A-Site ist, die anderen helfen soll, ist nur die allgemeine Frage von großer Bedeutung, aber ich würde mich über Kommentare zu meiner Situation freuen.


16
Vermeiden Sie Arduino IDE, da es seinen IDE-Namen nicht verdient, es ist sogar ein sehr schlechter Editor: Es mag für Anfänger und einfache Skizzen gut sein, aber man sollte schnell zu etwas Besserem gehen.
Jfpoilpret

4
Dies ist eine ziemlich prägnante Aufschlüsselung dessen, was mit der "Arduino-Programmiersprache" gemeint ist (und was tatsächlich unter der Haube dieser Sprache steht).
AdjunctProfessorFalcon

10
C++ vs. The Arduino Language?- Die "Arduino-Sprache" ist C ++. Es gibt ein bisschen Vorverarbeitung, um Ihnen das Durchführen von Funktionsprototypen zu ersparen, aber es ist definitiv C ++.
Nick Gammon

2
Es gibt keine Arduino-Sprache. Es ist einfach eine Bibliothek.
Overdrivr

2
Nicht so sehr mit der Frage als mit den Kommentaren verbunden: Atmel Studio ist kostenlos und meiner Meinung nach ist es besser als Visual Studio für Arduino-Programmierung. Unterstützt auch das Visual Micro Plugin, obwohl es für das Programmieren und Debuggen von Arduinos überhaupt nicht erforderlich ist.
Cyberponk

Antworten:


55

Meine persönliche Erfahrung als Professor (Programmierung, Mechatronik) ist, dass es besser ist, sich für C / C ++ zu entscheiden, wenn Sie über Programmiererfahrung verfügen und sich mit Konzepten wie OOP auskennen. Die Arduino-Sprache ist wirklich großartig für Anfänger, hat aber einige Einschränkungen (z. B. müssen Sie alle Ihre Dateien im gleichen Ordner haben). Und es ist im Grunde eine Vereinfachung von C / C ++ (Sie können Arduino-Code praktisch kopieren und in eine C / C ++ - Datei einfügen, und es wird funktionieren). Es ist auch sinnvoll, eine bekannte IDE als Eclipse zu verwenden:

http://playground.arduino.cc/Code/Eclipse

Anfänglich ist etwas mehr Zeit für die Einrichtung und Konfiguration Ihrer Entwicklungsumgebung erforderlich, aber meiner Meinung nach lohnt es sich für Programmierer, die Erfahrung in einer anderen Sprache haben.

In jedem Fall schadet es Ihnen nicht, die Arduino-Sprache und die Arduino-IDE einige Tage lang zu verwenden, um sich mit der Arduino-Hardware vertraut zu machen, und dann mit Eclipse auf C / C ++ zu wechseln, um Ihr Projekt wirklich zu entwickeln.


Danke für deine Gedanken. Ich werde die Arduino-IDE verwenden, um zu lernen, wie alle verschiedenen Hardware-Teile wie Sensoren und LCD-Bildschirme usw. gesteuert werden. Dann werde ich auf C ++ umsteigen, um die Software für den Oktokopter zu erstellen. Kennst du ein gutes und kurzes Buch für Leute, die andere Sprachen sprechen? Das "Problem" bei vielen Büchern, die ich gefunden habe, ist, dass sie so viel enthalten, dass ich sie nicht brauche, weil ich mich auf einem kleinen Atmel-Mikrocontroller und nicht auf einem UI-Computer befinde.
Freund von Kim

1
Es gibt ein schönes Buch "C Programming for Arduino" von Julien Bayle, das nützlich ist. Es ist keine C ++ - Sprache, sondern soll Ihnen helfen, die Grundlagen zu verstehen.
Fenix688

Das ist eine gute Anfrage: ein kurzes und gutes Buch mit den Grundlagen von C ++ für Programmierer anderer Sprachen. Entschuldigung, ich kann keine Empfehlungen geben, mir sind keine guten bekannt. Tatsächlich schrieb ich ein Buch mit einem praktischen Schwerpunkt (Entwicklung eines Videospiels) für meine Schüler, aber es ist nur in Spanisch. Für ein gutes und praktisches C ++ - Buch würde ich Deitel & Deitel empfehlen. Wie man C ++ programmiert, Sie könnten viele fortgeschrittene Kapitel überspringen.
Drodri

1
C ++ unterstützt OO-Funktionen, C-Sprache nicht.
Chris O

1
@FriendofKim Nicht genau das, was ich meinte (obwohl Sie es technisch könnten, ist der Due schnell genug, um eine Softwarelösung für die serielle Nicht-Megabit-Kommunikation zu unterstützen, und er verfügt über insgesamt 5 U (S) ARTS, während die Arduino-Bibliotheken nur 4 bieten sie, aber iirc the Due Board stellt ohnehin keine Pins für einen der USARTs zur Verfügung); Die Arduino-Bibliotheken konfigurieren die USARTs so, dass sie den asynchronen Modus verwenden, aber ich brauchte einen synchronen Modus mit bis zu 6 Mbit / s (und ich musste den SPI-Modus verwenden, da die Eingabe als unformatierter Bitstrom behandelt werden musste, sodass keine Stoppbits / usw.) Ändern der Standard-PIO-Controller-Konfiguration.
JAB

48

In der Theorie ...
Es gibt eigentlich keine Arduino-Sprache als solche. Es ist wirklich nur C ++ mit einigen domänenspezifischen Bibliotheken. Diese fügen verschiedene Funktionen hinzu, z. B. Funktionen, die Sie zur Steuerung der Hardware aufrufen können. Wenn Sie diese Funktionen nicht hätten, müssten Sie direkt mit speziellen Registern fummeln, um alles zu steuern. So wird normalerweise die eingebettete Programmierung durchgeführt. Es ist schnell, aber es kann ziemlich schwer zu lernen und zu verstehen sein.

Zusätzlich zu den Funktionen fügen die Bibliotheken für einige Typen alternative Namen hinzu. Zum Beispiel booleanund bytesind nicht im C ++ Standard. Sie sind jedoch direkt gleichbedeutend mit boolund unsigned char.

All diese Dinge bedeuten, dass Sie wahrscheinlich allgemeinen C ++ - Code ohne Schwierigkeiten direkt nach Arduino portieren können. Wenn Sie jedoch in die andere Richtung zurückkehren, ist möglicherweise eine geringfügige Bearbeitung erforderlich.

In der Praxis ...
Trotzdem ist die Programmierung für Arduino nicht mit der allgemeinen C ++ - Programmierung identisch. Viele der Unterschiede gelten jedoch für alle eingebetteten Programme (z. B. begrenzter Speicher und begrenzte Rechenleistung).

Es ist auch erwähnenswert, dass, wenn Sie die offizielle Arduino IDE verwenden, es alle möglichen nervigen Macken und Einschränkungen gibt, wie Sie Ihren Code einrichten. Es gibt in allen Fällen Problemumgehungen (soweit mir bekannt ist), die jedoch manchmal recht frustrierend sind.

Verwenden Sie für volle Flexibilität eine IDE eines Drittanbieters (wie Eclipse) mit einem Plug-In, um Arduino zu unterstützen. Das sollte Ihnen alle Vorteile von C ++ zusammen mit den Arduino-Bibliotheken bieten.


25

Was sind die Vorteile von C ++ gegenüber der Arduino-Sprache bei der Verwendung von Arduino? Ich habe Erfahrung mit vorverarbeiteten Sprachen wie JavaScript und PHP und habe mit Sprachen wie Java und Visual Basic experimentiert.

Erstens akzeptiert der Arduino-Compiler / die IDE C und C ++ wie sie sind. Tatsächlich sind viele der Bibliotheken in C ++ geschrieben. Ein Großteil des zugrunde liegenden Systems ist nicht objektorientiert, könnte es aber sein.

Somit ist "Die Arduino-Sprache" C ++ oder C.

C ++ ist kein Müll gesammelt. Es verwaltet Variablen im Gültigkeitsbereich - wenn Sie schreiben:

int led = 13;

void blinkTimes(int value)
{
   int i;

   for(i=0;i<value;i++)
   {
      digitalWrite(led, HIGH);
      delay(1000);
      digitalWrite(led, LOW);
      delay(1000);
   }
}

Dann wirst du das finden ledund inicht wachsen oder auslaufen, egal wie oft du anrufst blinkTimes.

Wenn ieine Klasse wäre, würde sie in ähnlicher Weise entsorgt, sobald die Funktion beendet ist. Solange Sie keine newoder ähnliche Speicherzuweisungsfunktionen zum Erstellen neuer Objekte verwenden, müssen Sie sich keine Gedanken über Undichtigkeiten machen.

Wenn Sie große Klassen erstellen und viele davon in tief verschachtelten Funktionen verwenden, wird Ihnen möglicherweise immer noch der Speicher ausgehen. Im Allgemeinen treten jedoch erst dann Probleme auf, wenn Sie sich mit newund freeFunktionen befassen .

Wenn Sie verwenden new, müssen Sie deletezu geeigneten Zeiten anrufen . C ++ und Arduino haben keine automatische Garbage Collection, Sie müssen explizit Ihren eigenen Speicher verwalten.


1
Okay, wenn instanziierte Objekte (mit neuen) nicht überflüssig sind, muss ich das auch lernen. Ich nehme an, jedes Buch über C ++ wird das behandeln. Vielen Dank für eine gute Antwort!
Freund von Kim

14

Die Arduino-Sprache ist C ++, unterscheidet sich jedoch stark von den meisten C ++ - Varianten. In der Arduino-Sprache ist viel Abstraktion integriert, insbesondere in den Hardware-Schnittstellen, was die Verwendung sehr einfach macht. Wenn Sie einen Hintergrund in Java haben, sollten C und C ++ sehr ähnlich sein.

Die Hauptunterschiede zwischen Arduino und C ++ liegen im Speicher. Normalerweise verfügt ein moderner Computer über mehr als 2 GB RAM, während der Arduino Uno über 2 KB (1 Million Mal weniger) verfügt. Das Arduino verwendet auch 8-Bit-Anweisungen anstelle der 32-Bit-Anweisungen, die ein Computer verwendet. Dies wirkt sich hauptsächlich auf die Informationsmenge aus, die Sie in einer Variablen speichern können.

Wenn Sie in der Arduino-Welt noch sehr jung sind, sollten Sie ein Tutorial nachschlagen, da es viele gute gibt.


Sie erwähnen das Gedächtnis. Ich habe die Due, die 96 KB RAM hat. Aber das Letzte, was ich möchte, ist, dass der Copter aufgrund eines Speicherverlusts abstürzt (mit einer sehr teuren Kamera am Copter).
Freund von Kim

Wird der Speicher in C ++ automatisch verarbeitet (wie der Garbage Collector in Java), wenn nicht anders angegeben?
Freund von Kim

2
Der C ++ - Standard gibt keine Garantie für die Speichergröße - c ++ läuft bereits ohne Änderung auf eingebetteter Hardware.
Michael Thorpe

2
Sie beschreiben die Unterschiede zwischen den Hardwareplattformen, dort jedoch nicht C ++.
Cybergibbons

5
@FriendofKim In C ++ gibt es zwei verschiedene Möglichkeiten, Variablen / Objekte zu instanziieren. Wenn Sie sie lokal instanziieren (z. B. int blah = 5;), werden sie automatisch zerstört, wenn sie den Gültigkeitsbereich verlassen (dh am Ende der Schleife oder Funktion). Wenn Sie sie jedoch auf dem Heap instanziieren (z. B. int *blah = new int(5);), müssen Sie sie selbst freigeben. In der Regel ist es jedoch nicht ratsam, Heap-Daten in der eingebetteten Programmierung zu verwenden.
Peter Bloomfield

14

--- Update 170412
Ich habe meine ursprüngliche Antwort vor drei Jahren aus der Sicht geschrieben, dass es ein bestimmtes "Arduino C ++" gibt. Die in der IDE verwendete Sprache ist Standard-C ++, da sie vom GNU C ++ - Compiler implementiert wird. "Scheinbare" Unterschiede schleichen sich ein, da die IDE einige Vorverarbeitungsschritte vornimmt, um Neulingen bei der Sprachumstellung zu helfen, indem sie einige #includes (f / ex) ausfüllt. Aber Sie können - und ich auch - korrektes C ++ schreiben und bekommen genau das, was Sie erwarten.
--- Update beenden

Beschränken Sie die Verwendung von C ++ - Sprachfunktionen auf diejenigen, deren Implementierung Sie vollständig verstehen. Es gibt einige Funktionen, die sich zu ressourcenintensiverem Code kompilieren lassen, als dies beim Lesen des Quellcodes offensichtlich ist. Die optional generierte .lss-Auflistung (zusammengeführte Quelle und Assembly) gibt Ihnen einen guten Einblick in die Funktionsweise des C ++ - Compilers, als Sie nicht nachgesehen haben.

Zu Ihrer Frage zum Arbeitsspeicher: C ++ sammelt keine Daten. Stapelbasierte Sprachen wie C und C ++ weisen beim Funktionseintrag temporären Speicher für automatische Variablen auf dem Stapel zu, der dann freigegeben wird, wenn die Funktion zurückgegeben wird. Dies ist jedoch keine echte Garbage Collection. Objekte, die im Heap- oder globalen Speicher erstellt wurden, bleiben erhalten, bis Sie sie explizit löschen. Stellen Sie sicher, dass Sie wissen, wo, wann und wie lange verschiedene Arten von Objekten erstellt werden. Sie möchten wirklich nicht, dass Ihre Code- newund deleteCodeing-Objekte nicht ohne Weiteres ausgeführt werden. Sie werden im Heap-Speicher erstellt, fragmentieren ihn und lassen ihn in den Stapel hineinwachsen. Dann stürzt Ihr Code - und Ihr netter Hubschrauber - ab.

C tut weniger für Sie , damit es weniger tun können , um Sie. Es ist keine schlechte Wahl. C mit einigen der C ++ - Funktionen kann eine noch bessere Wahl sein, vorausgesetzt, Sie wählen die zusätzlichen Funktionen mit Bedacht aus. C ++, wenn dies Ihre beiden Möglichkeiten sind:

[Originale Antwort] - C ++ ist eine standardisierte Sprache. Es ist weit verbreitet in vielen Umgebungen, einschließlich eingebetteter Systeme, und wird daher eingehender getestet als die C ++ - ähnliche Sprache "Arduino". Dies ist besonders wichtig für unternehmenskritische / sicherheitskritische Anwendungen, wie Sie sie planen. Abgestürzter Code bedeutet einen abgestürzten Hubschrauber und selbst wenn er niemanden verletzt, wird Ihr teurer Computer beschädigt .

  • Als Standard ist C ++ portabel. Müssen Sie Ihren Prozessor aktualisieren? Alles andere als Silizium-spezifischer Code wird auf den neuen portiert. Müssen Sie Ihr Toolset, Ihr Entwicklungssystem und Ihr Host-Betriebssystem ändern? C ++ wird überall unterstützt. Obwohl Arduino IDE überall dort ausgeführt wird, wo Java unterstützt wird, ist es das einzige Tool, das Arduino C ++ verwendet, und es ist ein sehr eingeschränktes Tool. Wenn Sie Eclipse, die AVR-Tools, verwenden möchten, barfuß auf der Befehlszeile arbeiten, in Emacs entwickeln oder in einer anderen von Ihnen bevorzugten Umgebung arbeiten möchten, wird Standard-C ++ unterstützt.

  • Die Arduino-IDE erledigt Dinge hinter Ihrem Rücken - und zwar # schließt sie .h-Dateien ein, wenn sie denkt, dass Sie sie benötigen. Selbst wenn es richtig ist, möchten Sie wirklich alles schreiben oder zumindest sehen und verstehen, was der Compiler sehen wird. Programmiersprachen sind nicht für Computer gedacht (Computer essen zum Frühstück etwas). Sie sind für Leute gemacht, speziell für die Leute, die Ihnen bei dem Projekt folgen, von denen die wichtigsten vielleicht ... Sie! wahrscheinlich, beheben Sie es. Sie möchten wirklich alles sehen können, was der Compiler sieht.


2
Dies ist eine wirklich gute Antwort. Es scheint klar, dass Sie C ++ mögen und ich es auch mögen sollte! ... Aber im Ernst, ich werde gleich auf C ++ umsteigen, sobald ich verstanden habe, wie die "Kommunikation" mit den verschiedenen Sensoren usw. funktioniert.
Freund von Kim

Kennen Sie gute Bücher zu diesem Thema? (Geeignet für mich, die schon seit Jahren in anderen Sprachen programmieren und nur den "eingebetteten Teil" von C ++ benötigen.)
Friend of Kim

Denken Sie, dass Accelerated C ++ ein gutes Buch dafür ist?
Freund von Kim

2
Ich wünschte, ich könnte Ihnen mit dem "richtigen" Buch helfen, aber ich kam zu C ++ mit einer Menge C hinter mir und Kernighan & Ritchies Die C-Programmiersprache ist immer noch meine erste Wahl für alles, was nicht explizit in C ++ vorkommt und Ellis & Stroustrup's The Annotated C ++ Reference Manual für C ++. Wenn Sie jedoch auf Hardware schreiben, sollten Sie sich einige der Gerätebibliotheken ansehen, die Benutzer von Arduino.cc zur Verfügung gestellt haben . Beginnen Sie mit der Optimierung der E / A-Ports mit den Funktionen pinMode (), digitalWrite () und digitalRead (), dann mit den entsprechenden analogen E / A-Funktionen und schließlich ...
JRobert

1
... planen, direkt in E / A-Register zu schreiben, um die Geschwindigkeit und den Speicherplatz zu verbessern. Programme wie blinky.cpp und hello.cpp sind gute Orte, um mit der Hardware herumzuspielen. Wenn Sie ein einfaches Multimeter und ein paar LEDs mit den richtigen Strombegrenzungswiderständen hinzufügen, die permanent an einem Bein angelötet sind, sollten Sie in der Lage sein, echte, wenn auch einfache Ergebnisse Ihrer Bemühungen zu sehen. Lesen Sie danach die Datenblätter für die Hardware, die Sie interessiert, um zu erfahren, welche Signale Sie lesen können / müssen, damit sie wiedergegeben werden. Temperatursensoren sind einfach zu bedienen und brauchen nicht alle einen Kühlschranklogger? Habe Spaß!
JRobert

10

Nach meiner Erfahrung ist es am besten, neue und Löschvorgänge zu vermeiden, wenn Sie auf Computern mit begrenztem Arbeitsspeicher ausgeführt werden.

  • Die Speicherverwaltung selbst benötigt wertvollen Programm- und RAM-Speicherplatz
  • ISR-Vektoren werden beim Kompilieren gesetzt. Es ist für eine Klasseninstanz schwierig (unmöglich?), Einen ISR zur Laufzeit zu beanspruchen
  • In der Regel wissen Sie beim Kompilieren, welche Klasseninstanzen Sie benötigen - z. B. 3-Tasten-Debouncer, einen Bildschirmtreiber und einen zweizeiligen Bildschirmtreiber
  • Die Speicherverwaltung führt zu unbekannten Verzögerungen, wenn Sie new oder delete verwenden.

Es mag Fälle geben, in denen es gerechtfertigt ist, dynamische Instanzkonstruktion und -zerstörung zu verwenden, aber ich vermute, dass sie selten sind.


Da C ++ für mich völlig neu ist, habe ich eine Folgefrage zum STD. Ist es eine schlechte Idee, es im Gedächtnis zu behalten? Wenn nicht, wie kann es hinzugefügt werden (Eclipse)? Ich habe den AVR-Compiler eingerichtet und es funktioniert gut.
Freund von Kim

1
Alles, was Sie sagen, ist richtig, aber ich verstehe nicht, wie dies eine Antwort auf die OP-Frage ist. newund deletesind auch in Arduino IDE verfügbar.
jfpoilpret

Es ist keine Antwort, sondern eine sehr hilfreiche Information, die ich sehr schätze.
Freund von Kim

8

Wie in mehreren Antworten erwähnt, sollten Sie beim Programmieren eines eingebetteten Systems im Allgemeinen neue vermeiden, es sei denn, Sie verwalten Ihren eigenen Speicherhaufen und wissen wirklich, wie Ihre Objektlebenszyklen aussehen werden. Statische Zuordnungen oder Stapelvariablen sind viel sicherer. Ein gängiger Trick, um beispielsweise Puffer variabler Länge zu verwalten, die für die Dauer einer Funktion zugewiesen sind, besteht darin, eine automatische Variable (auf dem Stapel) zu haben, die ein Objekt ist, das in seinem Konstruktor neu aufruft , und den Löschvorgang dann im Destruktor abzulegen Wenn das Objekt den Gültigkeitsbereich verlässt, wird der Puffer wieder an den Heap freigegeben. Auch dies ist in kleinen Mikros normalerweise von begrenztem Nutzen, aber es ist ein schönes Muster, an das man sich erinnert.


6

Zusätzlich zu den obigen Kommentaren möchte ich die Probleme mit dem Arbeitsspeicher, die Sie auf Arduino-Platinen haben, weiter hervorheben, insbesondere mit dem Uno (und anderen, die denselben Mikrocontroller verwenden). Ich habe kürzlich ein einfaches Space Invaders-Spiel geschrieben, das auf einer 32x32-LED-Matrix läuft, und bin wiederholt auf Probleme gestoßen, die durch zu wenig Arbeitsspeicher verursacht wurden.

Der Uno hat nur 2048 Bytes RAM. Die Bibliothek für meine Matrix übernahm 3/4 davon und ließ mir rund 400 Bytes für das Spiel übrig. Da ich beabsichtige, das Projekt irgendwann zu "upgraden", um mehrere Spiele mit demselben Programm auf der Grundlage des leistungsfähigeren Due auszuführen, habe ich den Code mit OO-Prinzipien und viel Klassenvererbung entworfen. (Die Spielklasse wurde mit virtuellen Aktualisierungs- und Ziehungsaufrufen vererbt, die Spieleinheiten wurden alle vererbt).

Mir ging so ziemlich der Speicher aus, als ich die Eindringlinge hinzufügte. Ich habe versucht, Speicherplatz zu sparen, indem ich ihre Mitgliedsvariablen bitweise abgetastet habe, aber beim Hinzufügen der Schildobjekte ging mir der Speicherplatz wieder aus. Nachdem ich ein bisschen mehr geschabt hatte, lief ich aus und fügte die Bomben / Kugeln hinzu. Zu diesem Zeitpunkt durchsuchte ich den Code und entfernte alle "virtuellen" Tags (alle meine Klassenprototypen werden aus einem Visual Assist-Snippet erstellt und alle Destruktoren werden automatisch virtuell). Dies halbierte sofort meinen Speicherverbrauch und gab genug frei, um den Code zu vervollständigen.

Kurz gesagt, das Endergebnis ist C ++ - Code, der keine C ++ - Funktionen verwendet. Möglicherweise halten Sie sich auch nur an C und sind sich Ihrer Speichernutzung sehr bewusst. Wenn Sie die 2 KB überschreiten, erhalten Sie keine Hilfe. Insbesondere, wenn Sie eine dynamische Zuordnung verwenden, funktioniert der Code nicht mehr und Sie kratzen sich eine Weile am Kopf, bis Sie die Möglichkeit eines Speicherüberlaufs in Betracht ziehen.

PS - Bitfeldvariablen sind schlecht. Sehr schlecht. Abgesehen vom zusätzlichen Verarbeitungsaufwand habe ich die Häufigkeit, mit der ich dem Spiel einen neuen Status hinzufüge, aus den Augen verloren, aber der Code wurde nicht ausgeführt und ich konnte nicht verstehen, warum. Meine Statusvariable war nicht breit genug, um den neuen Statuswert aufzunehmen, sodass ich einen unerwarteten Status erhielt.


4

Die Arduino-Sprache ist C ++ (obwohl sie normalerweise in einem Stil implementiert ist, der eher "C mit Klassen" ähnelt, was in der Welt der Mikrocontroller für eingebettete Systeme durchaus üblich ist). Ende der Geschichte. Genug mit den Leuten, die denken, dass es bereits eine andere Sprache ist! Es benutzt den g ++ Compiler.

Beweis:

Aktivieren Sie die ausführliche Ausgabe beim Kompilieren in den Voreinstellungen und beim Hochladen, und Sie werden viel lernen, wenn Sie nur diese Zeilen lesen.

Hier einige zusätzliche Einblicke:

Meine eigenen Worte:

Arduino-Code ist C ++. Die Arduino- Kernfunktionen sind einfach eine Reihe von C ++ - Klassen und -Bibliotheken, die Sie verwenden können. Es wird mit dem GNU-Compiler gcc / g ++ erstellt und kompiliert . Ihre setup () - und loop () -Funktionen werden einfach in die obligatorische main () -Funktion eingefügt ( hier tatsächlich - beachten Sie, dass die Datei "main.cpp" ist, eine C ++ - Quelldatei) und es gibt einige zusätzliche Vorverarbeitung, um sicherzustellen, dass es sich um ein gültiges C ++ - Programm handelt (z. B. Scannen aller Funktionsprototypen [auch bekannt als: Deklarationen], damit Sie eine Funktion verwenden können, obwohl der Prototyp später in Ihrer .ino-Datei enthalten ist). Ein Großteil von Arduino ist jedoch in einem "C-Stil" geschrieben und erfordert daher die # extern "C" {}geschweiften Klammern, um C ++ daran zu hindernDie Funktion "name-mangling" (auch als "name decorating / name decoration" bezeichnet ) ruft C-Funktionen auf, die von AVR-libc implementiert wurden , der C-Implementierung für den ATmega328 und andere Mikrocontroller mit AVR-Architektur .

Arduino's Worte:

" Kann ich das Arduino-Board in C programmieren?
Tatsächlich sind Sie es bereits. Die Arduino-Sprache ist lediglich ein Satz von C / C ++ - Funktionen, die aus Ihrem Code aufgerufen werden können. Ihre Skizze wird geringfügig geändert (z. B. automatische Generierung von Funktionsprototypen). und wird dann direkt an einen C / C ++ - Compiler (avr-g ++) übergeben. Alle von avr-g ++ unterstützten Standard-C- und C ++ - Konstrukte sollten in Arduino funktionieren. Weitere Informationen finden Sie auf der Seite zum Arduino-Erstellungsprozess . "

Quelle: https://www.arduino.cc/en/Main/FAQ#toc13

Wann soll die Arduino-Bibliothek im Vergleich zu reinem C oder C ++ verwendet werden?

Verwenden Sie also die Arduino-Sprache, um die Dinge zu vereinfachen, und schreiben Sie Ihre eigenen Funktionen, wenn Sie mehr Spezialisierung benötigen. Ich empfehle jedoch, schnell von der IDE wegzukommen, um Code zu schreiben - verwenden Sie ihn einfach zum Kompilieren. Stellen Sie die IDE-Einstellungen so ein, dass "Externer Editor" verwendet wird. Verwenden Sie dann einen professionellen Quellcode-Editor / eine IDE wie Sublime Text 3 , Atom , Visual Studio Code oder Eclipse CDT , um Ihren Code zu schreiben. Sie können dann auf die Arduino IDE zurückklicken, um sie zu kompilieren und hochzuladen. Wenn Sie sich für Eclipse entscheiden, gibt es Möglichkeiten, dies in Eclipse zu tun (siehe auch die anderen Antworten hier und den Artikel zu Eclipse auf dem Arduino-Spielplatz hier). Ziehen Sie daher auch die Verwendung dieser Techniken in Betracht.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.