C ++ vs. Die Arduino-Sprache?

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

Ich denke, dies ist eine gute allgemeine Frage, aber ich Ich werde ein wenig darüber hinzufügen, warum ich frage, ob mir jemand einen Tipp geben möchte.

Ich habe Erfahrung mit vorverarbeiteten Sprachen wie JavaScript, PHP und habe mit Sprachen wie Java und Visual Basic herumgespielt. Mit anderen Worten, ich kenne Programmiertechniken und sowohl klassische als auch prototypische Objektorientierung, aber nichts über die direkte Kommunikation mit Hardware.

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

Da dies ein Q ist & Eine Site, die angenommen wird Um anderen zu helfen, ist nur die zu Beginn gestellte allgemeine Frage von großer Bedeutung, aber ich würde mich über Kommentare zu meiner Situation freuen.

Kommentare

  • Vermeiden Sie Arduino IDE, da es seinen IDE-Namen nicht verdient. Es ist sogar ein sehr schlechter Editor: Es ist gut für Anfänger und einfache Skizzen, aber man sollte schnell zu etwas Besserem gehen.
  • Dies ist eine ziemlich prägnante Aufschlüsselung dessen, was unter iv id = zu verstehen ist (und was ‚ tatsächlich unter der Haube von) „5f5c6138a9“>

Arduino-Programmierung Sprache. „

  • C++ vs. The Arduino Language? – Die “ Arduino-Sprache “ ist C ++. Es gibt ein bisschen Vorverarbeitung, um Ihnen das Ausführen von Funktionsprototypen zu ersparen, aber es ist definitiv C ++.
  • Es gibt keine Arduino-Sprache. Es ist einfach eine Bibliothek.
  • Nicht so sehr mit der Frage verbunden wie mit den Kommentaren: Atmel Studio ist kostenlos und meiner Meinung nach besser als Visual Studio für Arduino-Programmierung. Unterstützt auch das Visual Micro-Plugin, obwohl es zum Programmieren und Debuggen von Arduinos überhaupt nicht erforderlich ist.
  • Antwort

    Meine persönliche Erfahrung als Professor (Programmierung, Mechatronik) ist, dass es besser ist, sich für C / C ++ zu entscheiden, wenn Sie bereits Programmiererfahrung haben und sich der Konzepte als OOP bewusst sind. Die Arduino-Sprache ist wirklich gut für Anfänger, hat aber einige Einschränkungen (z. B. müssen Sie alle Ihre Dateien im selben Ordner haben). Und es ist im Grunde eine Vereinfachung von C / C ++ (Sie können praktisch & kopieren und Arduino-Code in eine C / C ++ – Datei einfügen, und es wird funktionieren). Es ist auch sinnvoll, eine vollständig bekannte IDE als Eclipse zu verwenden:

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

    Anfangs ist etwas mehr Setup und Konfiguration Ihrer Entwicklungsumgebung erforderlich, aber meiner Meinung nach lohnt es sich für Programmierer mit Erfahrung in einer anderen Sprache.

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

    Kommentare

    • Vielen Dank für Ihre Gedanken. Ich ‚ werde die Arduino IDE verwenden, um zu lernen, wie die gesamte Hardware gesteuert wird Teile wie Sensoren und LCD-Bildschirme usw. Dann werde ich ‚ auf C ++ umsteigen, um die Software für den Oktokopter zu erstellen. Kennen Sie ein gutes und kurzes Buch für Leute, die andere Sprachen sprechen? Das “ Problem “ bei vielen Bücher, die ich ‚ gefunden habe, enthalten so viel, dass ich ‚ nicht benötige, weil ich ‚ m auf einem kleinen Atmel-Mikrocontroller anstatt auf einem UI-Computer.
    • Es gibt ein schönes Buch “ C-Programmierung für Arduino “ von Julien Bayle, was nützlich ist. Es ist keine C ++ – Sprache, sondern soll Ihnen helfen, die Grundlagen zu verstehen.
    • 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 habe ich ein Buch mit einem praktischen Schwerpunkt (Entwicklung eines Videospiels) für meine Schüler geschrieben, aber es ist nur auf Spanisch. Für ein gutes und praktisches C ++ – Buch würde ich Deitel empfehlen & Deitel Wie man C ++ programmiert, können Sie viele erweiterte Kapitel überspringen.
    • C ++ unterstützt OO-Funktionen, C-Sprache nicht.
    • @FriendofKim Nicht genau das, was ich gemeint habe (obwohl technisch gesehen, ist das Due schnell genug, um eine Softwarelösung für die serielle Nicht-Megabit-Kommunikation zu unterstützen, und es verfügt über 5 U (S) ARTS Insgesamt stellen die Arduino-Bibliotheken nur 4 davon zur Verfügung, aber das Due-Board bietet ohnehin keine Pins für einen der USARTs. Die Arduino-Bibliotheken konfigurieren die USARTs für die Verwendung des asynchronen Modus, aber ich brauchte eine Synchronisierung mit bis zu 6 Mbit / s (und ich musste den SPI-Modus verwenden, da die Eingabe als roher Bitstrom behandelt werden musste, damit keine Stoppbits / etc.), bei dem auch die Standardkonfiguration des PIO-Controllers geändert wurde.

    Antwort

    Theoretisch …
    Es gibt nicht wirklich eine 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 herumspielen, um alles zu steuern. So wird Embedded-Programmierung normalerweise durchgeführt. Es ist schnell, aber es kann sehr schwer zu lernen und zu verstehen sein.

    Zusätzlich zu den Funktionen fügen die Bibliotheken für einige Typen alternative Namen hinzu. Beispielsweise sind boolean und byte nicht im C ++ – Standard enthalten. Sie entsprechen jedoch direkt bool und unsigned char.

    All diese Dinge bedeuten, dass Sie wahrscheinlich allgemein portieren können C ++ Code direkt auf Arduino ohne Schwierigkeiten. 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 genau die gleiche wie die allgemeine C ++ – Programmierung. Viele der Unterschiede sind jedoch allen eingebetteten Programmen gemeinsam (z. B. begrenzter Speicher und begrenzte Verarbeitungsleistung).

    Es ist auch erwähnenswert, dass es bei Verwendung der offiziellen Arduino-IDE allerlei nervige Macken und Einschränkungen bei der Einrichtung Ihres Codes gibt. Soweit mir bekannt ist, gibt es in allen Fällen Problemumgehungen. Aber manchmal sind sie ziemlich frustrierend.

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

    Kommentare

    Antwort

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

    Zuerst 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.

    „Die Arduino-Sprache“ ist also C ++ oder C.

    C ++ wird nicht durch 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 werden Sie finden dass led und i nicht wachsen oder auslaufen, egal wie oft Sie blinkTimes.

    Wenn i eine Klasse wäre, würde sie nach Beendigung der Funktion ebenfalls entsorgt. Solange Sie new oder ähnliche Speicherzuweisungsfunktionen zum Erstellen neuer Objekte, dann müssen Sie sich keine Sorgen über Lecks machen.

    Wenn Sie erstellen, geht Ihnen möglicherweise immer noch der Speicher aus große Klassen und verwenden viele davon in tief verschachtelten Funktionen, aber im Allgemeinen werden Sie erst dann in Schwierigkeiten geraten, wenn Sie anfangen, sich mit new und -Funktionen.

    Wenn Sie new verwenden, müssen Sie delete aufrufen zu angemessenen Zeiten. C ++ und Arduino haben keine automatische Speicherbereinigung. Sie müssen Ihren eigenen Speicher explizit verwalten.

    Kommentare

    • Okay, wenn instanziierte Objekte (mit neu) ‚ wird kein Müll gesammelt, ich ‚ muss das auch lernen. Ich nehme an, jedes Buch über C ++ wird das behandeln. Vielen Dank für eine gute Antwort!

    Antwort

    — Update 170412
    Ich habe mein Original geschrieben Antwort vor drei Jahren aus der Perspektive, dass es ein eigenes „Arduino C ++“ gibt. Die in der IDE verwendete Sprache ist Standard-C ++, da sie vom GNU C ++ – Compiler implementiert wird. „Offensichtliche“ Unterschiede schleichen sich ein, weil die IDE einige Vorverarbeitungen vornimmt, um Neulingen in der Sprache zu helfen, ein paar „Fallstricke“ zu vermeiden, indem sie einige #includes f / ex ausfüllt. Aber Sie können – und ich auch – korrektes C ++ darauf schreiben und genau das bekommen, was Sie erwarten.
    — Update beenden

    Beschränken Sie die Verwendung von C ++ – Sprachfunktionen auf diejenigen, deren Implementierung Sie durchführen komplett verstanden. Es gibt einige Funktionen, die zu ressourcenintensiverem Code kompiliert werden können, als dies beim Lesen des Quellcodes ersichtlich ist. Die optional generierte .lss-Liste (zusammengeführte Quelle und Assembly) kann Ihnen einen guten Einblick geben, was der C ++ – Compiler getan hat, als Sie nicht gesucht haben.

    Zu Ihrer Frage zum Speicher: C ++ sammelt keinen Müll. 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 Speicherbereinigung. Objekte, die im Heap- oder globalen Speicher erstellt wurden, bleiben so lange aktiv, 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 Ihr Code new -ing und delete -ing Objekte wohl oder übel. Sie werden im Heapspeicher erstellt. Fragmentieren Sie es und lassen Sie es in den Stapel hineinwachsen. Dann stürzt Ihr Code – und Ihr netter „Copter – ab.

    C tut weniger für Sie, sodass es weniger kann an Sie. Es ist keine schlechte Wahl. C mit einigen Funktionen von C ++ kann eine noch bessere Wahl sein, wenn Sie die zusätzlichen Funktionen mit Bedacht auswählen. C ++, wenn dies Ihre beiden Möglichkeiten sind:

    [Originalantwort] – C ++ ist eine standardisierte Sprache Es ist in vielen Umgebungen, einschließlich eingebetteter Systeme, weit verbreitet und wird daher gründlicher getestet als die C ++ – Sprache „Arduino“. Dies ist besonders wichtig für geschäftskritische / sicherheitskritische Anwendungen, wie Sie sie planen. Abgestürzter Code bedeutet einen abgestürzten „Copter“, und selbst wenn er niemanden verletzt, wird Ihre teure Maschine beschädigen.

    • Als Standard ist C ++ portabel. Sie müssen Ihren Prozessor aktualisieren? Alles außer siliziumspezifischem Code wird auf den neuen portiert. Sie müssen 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 auch sehr begrenzt l. Wenn Sie Eclipse, die AVR-Tools, verwenden, in der Befehlszeile barfuß gehen, in Emacs oder einer anderen von Ihnen bevorzugten Umgebung entwickeln möchten, wird Standard-C ++ unterstützt.

    • Die Arduino IDE erledigt Dinge hinter Ihrem Rücken – insbesondere enthält sie .h-Dateien, 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 gemacht (Computer essen zum Frühstück etwas), sie sind für Leute gemacht, insbesondere für die Leute, die Ihnen im Projekt folgen, von denen die wichtigsten vielleicht … Sie! Sind, wenn 6 Monate später Wenn Sie ein Modul geschrieben haben, müssen Sie zurückkommen, um es zu verbessern oder wahrscheinlicher zu reparieren. Sie möchten wirklich alles sehen können, was der Compiler sieht.

    Kommentare

    Antwort

    Die Arduino-Sprache ist C ++, aber es ist sehr verschieden von den meisten C ++ – Sorten.

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.