Open Source im professionellen Einsatz
Linux-Magazin 06/2014
© handmadepictures, 123RF

© handmadepictures, 123RF

Besonderheiten beim Programmieren für den Raspberry Pi

Rezepte für die Beere

Der unerhört beliebte und günstige Einplatinencomputer Raspberry Pi fasst sich wie ein gewöhnlicher PC an. Entwickler müssen ein paar Einschränkungen beachten, im Gegenzug dürfen sie die IO-Pins ansteuern.

922

Für Linux-Anwender liefert ein Raspberry Pi gegenüber einem gewöhnlichen PC kaum Grund zur Beunruhigung: Betriebssystem sowie alle freien Bibliotheken und Programme lassen sich prima für den populären Microcomputer übersetzen und laufen auch, soweit es die Ressourcen zulassen. Des Weiteren dürfen Linux-Anwender und -Entwickler darauf vertrauen, dass interpretativ ablaufende Skripte unverändert funktionieren – insbesondere Shellskripte.

Für selbst geschriebene Programme dagegen, die erst ein Compiler in Binärcode umwandelt, braucht man – klar – den passenden Compiler. Jeder unter einer Open-Source-Lizenz stehende Übersetzer ist natürlich lauffähig. Das ist aber nur der leichtere Teil, denn Compiler und Linker müssen Raspberry-Pi-, sprich geeigneten nativen ARM-Code erzeugen.

Zum Glück erweist sich dies für die Entwicklerpraxis kaum als Einschränkung, denn die viele Compiler spucken auf Zuruf ARM-Binaries im Allgemeinen und Raspberry-Pi-ARM11-Code im Speziellen aus. Die Seiten [1] und [2] listen Sprachen mit nativer Raspberry-Unterstützung auf: Basic (Gambas), C und C++ (GCC), C# (per Mono, [3]), Cobol (Open Cobol, Elastic Cobol), Erlang [4], Forth (Gforth), Fortran (Gfortran), Go, Java (Open JDK und JRE, Java FX, [5]), Lisp, Logo, Lua (gern in Kombination mit C oder C++), Objective-C, Pascal und Object Pascal (Free Pascal mit Lazarus), Javascript (via Node.js), Perl, PHP, Prolog, Python, Ruby, Scratch (Achtung: langsam!), Smalltalk und Tcl/Tk. Hinzu kommen eimerweise Lehr- und Lernsprachen [6] sowie Konstrukte aus der Welt der visuellen Programmierung (siehe dazu auch den extra Artikel hier im Schwerpunkt).

Wer seine Programmiersprache in dieser Liste wiederfindet, wird wohl seine Programme auf dem Mini-PC zum Laufen bekommen. Für einen Teil der Compiler gibt es auch passende IDEs. Wer sich nicht von der Sprache auf eine IDE festlegen mag, sollte sich die sehr schlanke GTK-basierte IDE Geany [7] anschauen, die eine beachtlich große Zahl Programmiersprachen unterstützt.

Im einfachsten Fall übersetzt der Entwickler direkt auf dem Pi, was zuvor keinerlei Konfigurationsaufwand nötig macht. Er muss sich aber im Klaren sein, dass Compiling eine CPU-intensive Angelegenheit und die Rechenleistung des 35-Euro-Computers begrenzt ist. Bei umfangreicheren Projekten dauert ein Übersetzungslauf schon mal den ganzen Arbeitstag. Wer in diesen Regionen unterwegs ist, sollte seine Toolchain auf einen echten PC verlegen, also auf Crosscompiling umstellen.

Hardware-Unterschiede beachten

Der Linux-Kernel und die Systembibliotheken ziehen schon vom Ansatz her exzellente Abstraktionsschichten zwischen Anwendung und Hardware ein. Gleichwohl müssen Programmierer beachten, dass je näher sie der Hardware kommen, umso deutlicher die Unterschiede zu einem Standard-PC zu Tage treten. Das beginnt bei Tools, die Informationen aus dem Proc-Filesystem holen und geht weiter bei Details, beispielsweise dem, dass die Java-Bibliothek Open JFX auf dem Raspberry Pi nur drei bestimmte Touchscreen-Modelle anzusteuern in der Lage ist.

Den Gipfel der Hardwareabhängigkeit erreicht, wer sich anschickt, die Ein-/Ausgabe-Pins der Platine anzusteuern (General Purpose Input/Output, GPIO). Der Programmierer kann aus der vermeintlichen Not auch eine Tugend machen, indem er die Perspektive des Hardware-Applikationsentwickler übernimmt. Er betrachtet dann den Raspberry Pi nicht mehr als PC-ähnliche Blackbox, sondern als ARM-Controller-Chip von Broadcom mit der Modellbezeichnung BCM 2836 ([8], Abbildung 1) mit ein bisschen Ethernet- und USB-Peripherie drumrum.

© © BroadcomAbbildung 1: Spätestens der Assembler-Programmierer muss sich über die Raspberry-Hardware klar werden: Technisch handelt es sich um einen ARM-Chip von Broadcom mit der Modellbezeichnung BCM 2836.

Gut zu Fuß: Assembler

Insbesondere wenn wie beim Raspberry die Pinbelegung genau dokumentiert ist, programmieren nicht wenige Hardware-Entwickler einen solchen Standard-Microcontroller bevorzugt per (Makro-)Assembler, was die totale Transparenz bedeutet, Tool-technisch dank GNU Assembler (»as« aus den Binutils) oder dem GCC-internen Assembler kein Problem bereitet, ungemein effizienten Binärcode produziert und Zugang zur Vector-Floatingpoint-Einheit sowie dem Signalprozessor des Chips verschafft. [9]

Wer sich den Zu-Fuß-Marsch per Assembler nicht zutraut oder seiner Mutter-Programmiersprache nicht untreu werden will, kommt natürlich auch an die GPIO-Pins des Single-Board-Computers heran. Sogar Shellskripte schaffen dies – mit Echos in Richtung Sys-FS. Für einige Sprachen existieren Module oder Bibliotheken, die den Low-Level-Teil abstrahieren, beispielsweise die Python-Library RPi.GPIO [10] oder die Hi Pi Perl Modules [11], die sogar Interrups behandeln. Listing 1 zeigt Java-Quellcode, der unter Mithilfe der Pi4J-Bibliothek [12] für den Raspberry einen Aus- und einen Eingang programmiert (Beispiele für auch andere Sprachen unter [13]).

Wie nah man der Hardware trotzdem noch ist, mag der Hinweis illustrieren, dass manche Himbeer-Programmierer IO-Bibliotheken vom außerordentlich simpel gestrickten Arduino in ihre Projekte eingebunden haben, um zu gut funktionierendem IO-Code zu kommen.

Listing 1

GPIOs mit Java ansprechen

01 public static void main(String[] args) {
02
03     // GPIO-Controller erzeugen
04     GpioController gpio = GpioFactory.getInstance();
05
06     // GPIO-Pin #01 als Ausgang bereitstellen und ausschalten
07     GpioPinDigitalOutput outputPin = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01, "MyLED", PinState.LOW);
08
09     // Ausgang auf Low (Off) und dann High (On) schalten
10     outputPin.low();
11     outputPin.high();
12
13     // GPIO-Pin #02 als Eingang mit Pulldown-Widerstand bereitstellen
14     GpioPinDigitalInput inputPin = gpio.provisionDigitalInputPin(RaspiPin.GPIO_02, "MyButton", PinPullResistance.PULL_DOWN);
15
16     // Hole Input-Status von Pin 2
17     boolean input_value = inputPin.isHigh();
18 }

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 2 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Türöffner

    Ein Optokoppler, ein Mosfet, ein Raspberry Pi, ein Webserver mit SQL-Datenbank und ein wenig Skript-Magie reichen aus, um einen Haustüröffner zu bauen. Der öffnet vom Smartphone aus die Tür oder spielt sogar je nach Gast andere Klingeltöne ab.

  • Raspi-Monitor

    Manchmal wäre es gut, wenn der Raspberry über einen ständig angeschlossenen Bildschirm verfügte und trotzdem portabel bliebe. Ein seit einiger Zeit erhältlicher 2,8 Zoll großer Touchscreen passt perfekt zu diesem Anwendungsfall. Das Linux-Magazin hat sich dieses Modell genauer angesehen.

  • Kern-Technik

    Der Linux-Kernel abstrahiert und verwaltet die Zugriffe auf GPIOs, also jene Ein- und Ausgabekanäle, die beispielsweise auf dem Raspberry Pi zu finden sind. Wer sich mit einem eigenen Treiber dort einklinkt, kann mit erheblich schnelleren Peripheriezugriffen rechnen.

  • Hummingboard

    Mit Quadcore-Power, mehr Speicher und schnelleren Interfaces richtet sich das Hummingboard an Raspberry-Pi-Besitzer, die mit einem Aufstieg liebäugeln. Auf weitgehende Kompatibilität der Schnittstellen haben die Macher geachtet, doch der Teufel steckt, wie so oft, auch hier im Detail.

  • Gnublin

    Dass Embedded Linux kein Hexenwerk sein muss, zeigt das Gnublin-Board der Hochschule Augsburg. Wer lernen will, wie er auf einem ARM-Linux Sensoren ausliest, Schalter benutzt und LEDs schaltet, ist bei dem kleinen Rechner richtig. Gegen Aufpreis gibt es eine stattliche Liste an Zubehör.

comments powered by Disqus

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.