Was steckt hinter den Arduino Befehlen?

Hi,

Ich habe mich in letzter Zeit etwas mit dem Arduino beschäftigt und wollte jetzt mal tiefer in die Materie gehen. In dem Zuge habe ich mich gefragt was für eine Programmierung hinter den Befehlen wie PinMode, digitalwrite Serial.begin...steckt. oder habe ich das falsch verstanden und der Controller wird wirklich mit diesen Befehlen programmiert?

Mfg

oder habe ich das falsch verstanden und der Controller wird wirklich mit diesen Befehlen programmiert?

Das Arduino Universum besteht, gerade bei den grundlegenden Funktionen (welche du genannt hast), aus C, bzw. ist in C geschrieben..
Zu einem kleinen Teil auch in Assembler.
Serial, Wire und andere Libs, so wie auch deine *,ino Dateien sind C++ in der Version C++11 abgefasst. Teilweise mit Assembler und C durchsetzt.

Du findest allen Arduino Kram im Quellcode auf deinem Rechner.
Kannst da also locker rein schauen und auch beliebig modifizieren.

Die IDE selber ist in Java geschrieben.
Deren Quellen liegen auf Github

Also alles in allem eine bunte Welt.

Das erste was du tun solltest ist Aufhören in "Befehlen" zu denken. In höheren Programmiersprachen gibt es für das alles genaue Namen mit genau definierten Bedeutungen. Sowas wie loop() und pinMode() ist eine Funktion (oder Methode wenn es zu einem Objekt gehört). +, =, etc. sind Operatoren.
Erstens findest du dann mit Google auch Anleitungen wenn du die richtigen Begriffe verwendest. Und zweitens gelten für verschiedene Dinge zum Teil unterschiedliche Regeln.

Der Quellcode der Arduino Software ist offen und auch direkt auf deinem PC lesbar:
x:\Arduino\hardware\arduino\avr\cores\arduino
x:\Arduino\hardware\arduino\avr\libraries
x:\Arduino\libraries

Die Pin Geschichten stehen in wiring_digital.c
Serial ist unter anderem in HardwareSerial.cpp implementiert

Die Print Klasse ist auch ziemlich interessant

Dein Vorhaben ist zwar löblich aber auch ein wenig kompliziert, vor allem wenn Du nicht schon gut programmieren kannst.
Dies weil solcher Code immer wieder andere Funktionen aufruft und es schwierig ist dem zu folgen. Außerdem mußt Du Dich mit dem Innenleben der Controller beschäftigen weil Register angesprochen werden und Du verstehen mußt was welches Register bzw welches Bit eines Registers was macht.
Auch sind ist die IDE für mehrere ähnliche (ATmega 328, ATmega32U4, ATmega2560) 8Bit Controller aber auch für total andere Controller (32 Bit Atmel SAM3X8E ARM Cortex-M3, Arm Cortex-M0+ SAMD21, ecc).
Darum werden viele Teile des Core bedingt je nach Modell / Controller kompiliert.

Grüße Uwe

MacMickey:
oder habe ich das falsch verstanden und der Controller wird wirklich mit diesen Befehlen programmiert?

eigentlich nein.

das was du in der Arduino IDE als C++ siehst (seien es Funktion, Methoden, Operatoren,...), oder auch direkt Assembler (wenn du soweit bist), wird durch die IDE an einen Compiler übergeben. Der Compiler "übersetzt" dann den Inhalt deiner einzelnen Tabs (und die verwendeten Funktionen, Methoden aus deinen eingebunden Libraries) in Code den der Prozessor versteht. Das sind zunächst viele separate Datein, die dann gelinkt werden und am Ende wird eine .hex Datei erstellt. Erst der Code in dieser .hex Datei wird an den Prozessor übertragen. Das Ganze ist in Wirklichkeit noch viel Umfangreicher.

C++ ist daher nur dein "Arduino Weg" ein Programm zu schreiben. Mit einer anderen IDE (und anderem Compiler) könntest du den Prozessor auch beispielsweise in Basic oder Pascal programmieren.

hier zwei Links zum lesen
Generell was zum Chip auf deinem Arduino Microchip AVR – Wikipedia
was deine Arduino IDE beim Druck auf "Kompilieren" macht Build Process · arduino/Arduino Wiki · GitHub