Kampis Elektroecke

Los geht´s!

Raspberry Pi

Bevor mit der Programmierung begonnen werden kann muss noch etwas Software installiert werden. Zudem gebe ich einen kurzen Blick auf den Prozessoraufbau und die “Programmiersprache” Assembler.

Der Prozessor: Was steckt eigentlich in dem Raspberry Pi?:

Bevor wir uns mit der Programmierung beschäftigen müssen wir den Prozessor erst einmal genauer kennen lernen. Auf dem Raspberry Pi sitzt ein Prozessor mit einer ARMv6 Architektur. Dieses Chipdesign wurde von einer englischen Firma namens ARM entwickelt. Im Gegensatz zu vielen anderen Halbleiterfirmen stellt die Firma keine Chips her, sie verkauft lediglich die Lizenzen für ihre entwickelten Chips. Bei den Chips handelt es sich um besonders stromsparende aber dennoch recht leistungsstarke Prozessoren. Durch die Tatsache das die Chips sehr wenig Strom benötigen sind diese häufig in mobilen und kleinen Anwendungen wie dem Raspberry Pi, Smartphones, Tablets, Router, etc. zu finden.

“Assembler” – was ist das eigentlich?:

Einen fertigen Prozessor muss man sich im Grunde als dummes Stück Silizium vorstellen. Durch geschriebene Programme wird dem ganzen Chip dann anschließend Leben eingehaucht. Mittlerweile existieren viele verschiedene Programmiersprachen, sogenannte höhere Sprachen, wie z.B. Python, Java, C#.
Wie der Name höhere Programmiersprache bereits andeutet, sind diese Sprachen weiterentwickelte Versionen einer Ursprungssprache.
Verfolgt man die Entwicklung der Programmiersprachen bis ganz zurück zum Anfang, gelangt man schließlich zur Programmiersprache Assembler. Assembler ist die Basis jeder Programmiersprache. Bei Assembler handelt es sich um die direkte Vorstufe zum Maschinencode, welcher von dem Prozessor ausgeführt wird.
Jeder Prozessor versteht nur seinen eigenen Maschinencode und jedes Programm in jeder Sprache wird durch einen Compiler in diesen Maschinencode (welcher nur noch aus Zahlen besteht) umgewandelt. Die Sprache Assembler ist nichts anderes, als das man jedem Maschinencode einen Namen gibt (sogenannte Mnemonics).
Auf diese Weise lassen sich die Funktionen leichter merken und der Code ist lesbarer. Eine einfache If-Abfrage aus einer höheren Programmiersprache besteht z.B. aus ganz vielen Assemblerbefehlen, die so ineinander verschachtelt werden, dass die Funktion der Abfrage raus kommt.
Die Assemblerbefehle decken nur die Grundfunktionen, wie das kopieren von Werten zwischen den Registern und den Speichern ab. Höhere Funktionen wie Abfragen, Schleifen etc. müssen alle noch programmiert werden. Der Vorteil von Assembler gegenüber jeder anderen Sprache ist die Geschwindigkeit.
Da Assemblerbefehle nur eine Funktion haben und quasi direkte Prozessorbefehle sind, sind Assemblerprogramme von der Ausführungsgeschwindigkeit sehr schnell.

Alles verstanden! Ich will loslegen…was brauche ich?:

Für die Erzeugung des ARMv6 Maschinencodes aus den Assembler Mnemonics wird ein spezielles Tool, der sogenannte Cross Compiler, benötigt. Dieser Compiler übersetzt den Code in die entsprechenden Assemblerbefehle. Im Gegensatz zu einem normalen Compiler kann der Cross Compiler auch Code für andere Architekturen erzeugen. Bezogen auf dieses Beispiel erzeugt der Cross Compiler also aus Code, der auf einer x86-Plattform entwickelt wurde (der Entwicklungsrechner), eine Binärdatei für eine ARM-Plattform (der Raspberry Pi). Ein normaler Compiler könnte nur Code auf einer x86-Plattform zu einer Binärdatei für x86 kompilieren.
Da sich die Verwendung eines Cross Compilers unter Windows in der Vergangenheit als sehr fehleranfällig und umständlich herausgestellt hat, würde ich hier den Einsatz eines Linux-Systems (z. B. Ubuntu) empfehlen. Wer dennoch auf einem Windows-System arbeiten möchte, kann dafür auf eine virtuelle Maschine (z. B. VirtualBox) ausweichen. Ich selber nutze diese Konstellation und kann so ganz bequem unter Windows arbeiten und unter Linux entwickeln.

Unter Linux muss dann noch die ARM-GNU Toolchain, also die zum cross compilieren notwendige Werkzeugsammlung, installiert werden:

Falls dennoch unter Windows entwickelt werden soll, so kann die ARM-Toolchain auch direkt bei ARM heruntergeladen werden. Weiterhin wird das Programm make für Windows benötigt.

Wenn alles beisammen ist, kann mit der ersten Lektion begonnen werden…

→ Zurück zu Raspberry Pi Assembler


Letzte Bearbeitung: 25.03.2018

4 Kommentare

  1. Hallo Daniel,

    super Seite – super Tutorial!
    Auf der Suche nach Assemblerprogrammierung des Raspberry bin ich bin ich auf Deine Seite gestoßen. Bisher habe ich fast ausschließlich in Assembler programmiert und bis auf wenige Ausnahmen nur 8-Bitter. Als ich mein letztes Projekt-einen HDMI-VGA-Generator mit mehreren AVR ausstatten mußte, hat man mir immer wieder gesagt-machst mir dem Raspberry oder besser noch einem Beaglebone. Die haben mehr Ports und sind viel schneller. Nachdem nun der Generator-vielleicht zu umständlich fertig ist, reitzte mich doch der Versuch mit einem Raspberry. Die Ernüchterung kam sehr schnell. Mit Linux und Python lassen sich derartige Generatoren nicht aufbauen. Das ist alles viel zu langsam und vor allem nicht jitterfrei. Ein möglicher Weg scheint nur die Programmierung in Assembler zu sein.
    Nun zu meinem eigentlichen Anliegen. Schon bei der Installationder 3 Tools scheiter ich. Der Link zu den Yargato Tools funktioniert nicht mehr. Mit welcher Geschwindigkeit werden die Befehle abgearbeitet? Im “ARM Architecture Reference Manual” habe ich dazu nichts gefunden. Bei den AVR’s stehen die benötigten Takte immer mit dabei.
    Ich würde mich sehr freuen, wenn ich mit Deiner Hilfe die 3 Tools erst mal zum spielen bekomme. Weiterhin möchte ich Dich bitten, das Assemblertutorial weiterzuschreiben. Natürlich nur, wenn Dein Studium nicht darunter leidet. Die absolute Krönung wäre allerdings die 3. Ausgabe Deines Buches mit einem extragroßem Assemblerkapitel.

    Mit freundlichen Grüßen

    Bernd

    1. Hallo Bernd,

      ich habe den Link aktualisiert. Du kannst dir nun die (neuen) Tools downloaden :).
      Bzgl. des Tuts…
      Schau mal hier:

      http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/index.html

      Dieses Tut ist quasi die Ausgangsbasis von mir gewesen (ist auch auf der Inhaltsseite vom Raspberry Pi Assembler verlinkt).
      Da kannst du dann schon etwas weiter spielen. :)

      Leider wird in dem Buch kein Assembler vorkommen können, da das (meiner Meinung nach) für Neulinge sehr wahrscheinlich zu viel werden würde und zu stark auf ein Thema bezogen ist ;)

      Gruß
      Daniel

    1. Hallo Dimitri,

      das Yagarto Toolchain ist unter Windows auch ein Krampf…
      Ich habe die Arbeiten damit komplett eingestellt. Ich mache das alles mittlerweile in einer VM unter Ubuntu (m. M. n. viel angenehmer).
      Ggf. wäre das für dich auch der bessere Schritt?

      Gruß
      Daniel

Schreibe einen Kommentar

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