Ausarbeitung Arduino

Hallo,

im zuge meines Studiums muss ich einen Fachvortrag zu einem Thema meiner Wahl halten. Ich habe mich für Arduino entschieden. Momentan bin ich an der Ausarbeitung bei dem Abschnitt: Programmierumgebung.

Nun scheiden sich aber die Geister. In einigen Abschnitten finde ich, das Arduino auf Processing bassiert, was wiederum auf Java aufgebaut ist. In einem anderen Artikel finde ich, das Arduino-Processing auf klassischen "C" basiert.

Was ist nun richtig?

Processing ist eine objektorientierte, stark typisierte Programmiersprache mit zugehöriger integrierter Entwicklungsumgebung. >Quelle: Wikipedia.

Was übernimmt nun Arduino davon? Die Benutzerumgebung von Processing zu Arduino ist quasi identisch.
Kann man sagen, das Processing eine eigene Programmiersprache ist, die auch beim Arduino zum einsatz kommt? Und das diese den Einstieg für Neueinsteiger erleichtert, da viele wichtige Funktionen bereits vor initialisiert sind und der Anwender sich keine Gedanken über Speicherverwaltung / Bit-Shiftung / Bibliotheken machen muss?
Ich finde leider zu dem Bereich nicht viele Informationen. Zu dem reinen programmieren ist das Internet voll von Informationen. Aber solche sachen, oder auch Geschichte, ist nicht sonderlich viel zu finden. Wenn jemand noch einen nützlichen Link hat, würde ich mich sehr freuen.

Mit freundliche Grüßen

Arduino IDE und die Processing IDE sind lediglich von der Optik angelehnt und sind beide in Java geschrieben. Arduino bassiert nicht nur auf dem klassichen "C". Hier kommen ebenfalls Teile aus dem C++ zum Einsatz.

Weder Arduino noch Processing ist eine eigene Programmiersprache. Beide erleichtern mit diversen Libarys und Maskierungen die Benutzerhandhabung für Anfänger oder solche, die weniger mit der Thematik zu tun haben (Künstler, .....).

Was ist nun richtig?

Ist Processing eine eigene Programmiersprache?
Die Arduino IDE ist in Java geschrieben.
Arduino Programme werden in C++ geschrieben.

Ein Teil des Processing Konzeptes, der Processing Idee, wurde in C++ übersetzt und in den Arduino Core übernommen.

Arduino Processing ist also an das original Processing angelehnt. Aber keinesfalls identisch.

http://playground.arduino.cc/Interfacing/Processing

combie:
Arduino Programme werden in C++ geschrieben.

Wobei die Wiring API als Vorlage verwendet wurde

digitalWrite() und Co gab es schon vor Arduino.

Nochmal zusammengefasst:

-Die IDE von Arduino ist an Processing angelehnt. (Also Texteditor/Compiler/Linker/Debugger/Quelltext Formatierung) ?

-Arduino liefert vorgefertigte Funktionen wie z.B. DigitalWrite() (Basierend auf die Wiring API). Dies bringt den Vorteil, das der Anwender keine konkreten Kenntnisse bezüglich Bit-Schfitung / Speicherverwaltung / Bibliotheksverwaltung benötigt.

-Viele Funktionen für die verschiedenen Shields vor-implementiert

-Arduino-boards werden in C/C++ programmiert

dann würde ich noch eine Gegenüberstellung machen. Ein simples Programm wo die Vorgefertigten Funktionen benutzt werden, und einmal in C++ Programm.

Ist das so richtig? bitte korrigiert mich wenn ich falsch liege.

Ist das so richtig? bitte korrigiert mich wenn ich falsch liege.

Gern!

dann würde ich noch eine Gegenüberstellung machen. Ein simples Programm wo die Vorgefertigten Funktionen benutzt werden, und einmal in C++ Programm.

Die vorgefertigten Funktionen sind auch in C/C++ geschrieben.
Und werden auch in C/C++ verwendet.

-Viele Funktionen für die verschiedenen Shields vor-implementiert

Die stecken nicht im Core, sondern in Libraries

GermanWings:
Ist das so richtig? bitte korrigiert mich wenn ich falsch liege.

Wenn ich mich nicht täusche, ist es so (prüfe das aber ggf. nochmal nach, bevor Du irgendwas davon verwendest):

Alle "Doppelnull" Arduino-Versionen vor der Version 1.0 basieren auf der "Wiring-Entwicklungsplattform" und dabei wurden die Programme damals mit der Processing Programmiersprache kompiliert, die auf Java basiert.

Aus der Zeit stammt beispielsweise die Aufteilung eines Sketches in die Funktionen setup() und loop(). Und von damals her rührt die auch heute noch oftmals abgeschriebene Aussage, dass "Arduino in einer C-ähnlichen Programmiersprache" programmiert wird. Tatsächlich ist Processing nicht 100% C/C++ kompatibel.

Mit Erscheinen der Arduino-Version 1.0 wurde dann der (javabasierte) Processing-Compiler gegen den AVR GCC Compiler ausgetauscht, der als native Compilerplattform ebenfalls für verschiedene Plattformen verfügbar ist. Seitdem ist allerdings nur noch die IDE selbst eine Java Anwendung, aber der GCC Compiler ist eine native Anwendung für die entsprechende Zielplattform. Und seitdem werden auf der Arduino-Plattform echte C++ Programme geschrieben und kompiliert.

Die javabasierte Processing Programmiersprache existiert weiter als PC-Anwendung und mit der "Firmata" Library existiert eine Arduino-Library, die es erlaubt, auf einen Arduino eine Standard-Firmware zu laden, ohne dafür extra eigenen Code zu schreiben, und den Arduino dann vom PC aus mit einem Processing-Programm zu steuern.

GermanWings:
Und das diese den Einstieg für Neueinsteiger erleichtert, da viele wichtige Funktionen bereits vor initialisiert sind und der Anwender sich keine Gedanken über Speicherverwaltung / Bit-Shiftung / Bibliotheken machen muss?

Theoretisch ja. Praktisch gilt das nur mit Einschränkungen

Bei ganz kurzen und einfachen Programmen muss man nicht viel über die Hintergründe nachdenken. Aber es zeigt sich gerade hier im Forum, dass man schon bei einigen relativen einfachen Anwendungen an die Grenzen dieser Idee stößt und etwas tiefer einsteigen muss.

Zum Beispiel hat der AVR eine Harvard Architektur wodurch Programmspeicher und RAM völlig getrennt sind. Und der Compiler kopiert am Anfang einfach alle Strings auf dem Flash ins RAM. Bei nur 2kB RAM kann das auf dem UNO/Atmega328 schnell knapp werden wenn man RAM intensive Bibliotheken wie Ethernet oder SD benutzt (die beide große Puffer belegen). Für print()/println() bietet die Arduino IDE da auch ein einfaches Makro um die Strings im Flash zu belassen. Sonst muss man etwas weiter ausholen. Bei kleinere Programmen ist das aber nicht unbedingt nötig.

Eine andere Stelle sind die I/O Pins. Das vereinfacht die IDE auch und es ist sehr schön, aber der Zugriff ist mit 4µs relativ langsam. Für die meisten Anwendungen reicht das locker aus. Aber wenn man man damit bestimmte Hardware ansprechen möchte, kann es sein, dass es zu langsam ist. Das ist aber relativ selten.

Allgemein kann man auch sagen, dass man nicht darum kommt sich etwas C/C++ Kenntnisse anzueignen. Die IDE vereinfacht zwar sehr vieles, aber sie nimmt einem nicht das Programmieren ab. Und Arduino wirbt fälschlicherweise damit, dass man auch ohne Programmierkenntnisse schnell zu Ergebnissen kommt. Bis auf die aller einfachsten Programme geht das nicht.