Was passiert eigentlich, wenn du auf den 'Code!' Button klickst?
Dein Programm in Form von bunten Befehlsblöcken liegt für den Computer zunächst als Blockbeschreibung im XML-Format vor. In diesem Format wird dein Programm als Datei auf dem Server gespeichert und auch von dort wieder geladen.
Du kannst dir dein aktuelles Programm als Blockbeschreibung im XML Format unter blockly-xml angucken!
In der Blockbeschreibung, also im XML-Format sind alle Positionen, Namen, Typen und die Verbindungen zu den anderen Blöcken abgespeichert. Das XML-Format ist ähnlich wie HTML aufgebaut: Einzelne Informationsstücke des Programms werden dabei in sogenannte Tags eingebettet und diese mit Attributen versehen, hier ein Beispiel:
<field name="COLOUR">#ffcc33</field>
Das Tag field, hat ein Attribut name mit dem Wert COLOUR und es enthält den Content #ffcc33. Bei einem Block in diesem Programm gibt es also ein Farbauswahlfeld mit dem Namen COLOUR, bei dem als Farbwert #ffcc33 (Sonnengelb) eingestellt ist.
Wikipedia:
XML
Der Code-Generator generiert jetzt aus deiner Datei im XML-Format ein professionelles C++ Programm.
Du kannst dir den erzeugten C++ Programmcode unter cpp-code angucken!
C und C++ sind leistungsstarke Programmiersprachen, die insbesondere bei hardwarenaher Programmierung und bei der Programmierung von Betriebssystemen eingesetzt werden. Auch bei Grafikkernen von Computerspielen wird gerne auf die hohe Ausführungsgeschwindigkeit und die umfassende Systembeherrschung auf C und C++ zurückgegriffen.
Hier mal ein Beispiel:
Aus dem Block setze Augenfarben [rot] [orange] wird die C++ Anweisung bob3.setEyes(0xf00, 0xfc3)
Mit BOB3 kannst du auch direkt die Programmierung mit C++ lernen und wie ein Profi programmieren!
Der zweite Verarbeitungsschritt ist das Compilieren: Hier wird das C++ Programm in ein Assembler-Programm übersetzt.
Du kannst dir das erzeugte Assembler-Programm unter asm-code angucken!
Bei der Compilierung wird aus dem relativ kurzen C++ Programm ein umfangreiches Assembler-Programm. Das Assembler-Programm beschreibt Schritt für Schritt ganz detailliert die einzelnen Operationen, die der Mikrocontroller auf dem BOB3 durchführen soll, um dein Programm auszuführen. Jede Mikroprozessor Familie hat seine eigene Assemblersprache!
Hier mal ein Beispiel:
Die Operation sbi 0x05, 7 ist z.B. ein Einzelschritt, den der Compiler für den Mikrocontroller vorbereitet hat. Die Abkürzung sbi bedeutet 'Set Bit in I/O Register'. Der Wert 0x05 steht für das IO-Register 5 und 7 für das Bit Nummer 7: Das IO-Register 5 ist der Ein-Ausgabe-Port B, dort ist an Bit 7 (eines der kleinen Beinchen am Mikrocontroller) die rechte Körper-LED von BOB3 angeschlossen -> sie leuchtet nach Ausführung der Operation. Das Gesamtprogramm setzt sich aus ganz vielen dieser Einzeloperationen zusammen!
Wikipedia:
Compiler
C++
Assemblersprache
Assembler
Register
Mikrocontroller
Die beiden letzten Verarbeitungsschritte sind das Assemblieren und das Linken: Der Assembler übersetzt unser Assembler-Programm in einen Bytecode. Anschließend setzt der Linker den Bytecode verschiedener Programmteile zu einem Gesamtprogramm zusammen.
Das fertige HEX-File kannst du dir unter hex-file angucken!
Bei der Assemblierung werden die einzelnen Operationen in Zahlenwerte, sogenannte Opcodes umgerechnet: Aus der Operation sbi 0x05, 7 wird der Opcode 9A2F als Hexadezimalzahl generiert. Dies entspricht der Zahl 1001 1010 0010 1111 im Binärformat. Der Mikrocontroller weiss bei diesen 16 Bit genau was er tun muss. Die Zahl 1001 1010 0010 1111 bedeutet: schalte die rechte Körper-LED von BOB3 ein! Für das Einschalten der linken Körper-LED lautet der Opcode übrigens 9A2E, für das Ausschalten wird dem Mikrocontroller die 982E bzw. 982F geliefert...
Wikipedia:
Assembler
Opcode
Hexadezimalzahl
Binärzahl
Linker
HEX-File