Viele Embedded-Systeme sind heute keine tief im Endgeräte vergrabenen Rechnersysteme mehr ohne erkennbare Benutzerschnittstelle. Und wo vor Jahren noch ein zweizeiliges Display und ein paar Tasten ausreichten, integrieren OEMs heute grafikintensive Schnittstellen mit großen Displays und umfangreichen Funktionen. Eine Rich-Media-Benutzerschnittstelle ist oft sogar ein wichtiges Verkaufsmerkmal. Sie muss nicht nur funktionell und effektiv sein, der Anwender erwartet auch ein attraktives Design, schicke Animationen und sanfte Übergänge zwischen visuellen Anzeigen und Menüs. Dazu braucht es eine hohe Reaktionsfähigkeit der zugrundeliegenden Software und des Betriebssystems.

Selbst im Auto herrschen heute grafikintensive Displays vor. Mit Qt lassen sich solche Anwendungen sehr effizient entwickeln.

Selbst im Auto herrschen heute grafikintensive Displays vor. Mit Qt lassen sich solche Anwendungen sehr effizient entwickeln.Digia

Die Komplexität an der Oberfläche

Die Basis dafür sind 32-Bit-Prozessoren mit mehreren Cores und integrierten Grafikprozessoren (GPU, Graphical Processing Unit). Diese zusätzlichen Verarbeitungseinheiten erhöhen allerdings die Komplexität im Entwicklungsprozess. Gleiches gilt für das GUI: Benutzerschnittstellen mit simplen textbasierten Menüs waren leicht zu schreiben, auch die Ablaufsteuerung war stringent. Heutige grafikintensive UIs erfordern einen sehr dynamischen Ansatz mit einer Ereignisschleife und Multithreading, um die Benutzerschnittstelle nicht zu blockieren.

Events können praktisch jederzeit auftreten und von einer beliebigen Quelle stammen. Ein berührungsbasiertes System kann zum Beispiel nicht nur virtuelle Tastaturanschläge und Scroll-Bewegungen akzeptieren, sondern muss auch Gesten erkennen, deren Bedeutung sich je nach Anwendung ändern. Für diese Auswertung kann Software zuständig sein, oder es gibt einen eigenen Touch-Prozessor. In jedem Fall gilt es, alle Gesten und Eingaben unverzüglich zu verarbeiten und an den richtigen Prozess zu liefern.

Auf einen Blick

Embedded-Applikationen haben heute ähnlich komplexe Oberflächen wie früher nur Desktop-PCs, allerdings bleiben die Rechen-Ressourcen im Vergleich sehr begrenzt. Also gilt es, effiziente Anwendungen zu schreiben und dabei auch effiziente Tools einzusetzen. Digia hat mit seinem Qt Embedded eine durchgängige Lösung, vom System über die Frameworks bis zur Cross-Entwicklungsumgebung.

So ein System stellt erhebliche Anforderungen an die Laufzeitumgebung: die Core-Grafik-Treiber, die Grafik-, Video- und Audiobibliotheken sowie die Schnittstellen-Designtools müssen zueinander passen. Auch GUI-Designer mit wenig Programmierkenntnissen müssen damit umgehen können. Das alles ist für Desktop-Entwickler schon schwierig genug – bei Embedded-Designs mit ihrer Cross-Entwicklungsumgebung ist es noch komplexer. Jeder Durchlauf mit Entwicklung, Kompilierung, Linking, Flashen und Testen kostet erheblich Zeit.

Unter der Haube

Auch unter der Oberfläche leisten Embedded-Systeme heute viel: Sie kommunizieren über das Internet und speichern und bearbeiten strukturierte Daten, um sich mit Servern in der Cloud zu synchronisieren. Dazu kommen Datenbank-Abfragesysteme wie SQL und zugehörige Web-Techniken wie XQuery und JSON, die Entwickler in das Target mit einbeziehen müssen.

Statt auch nur zu versuchen, derlei Standardfunktionalität für jedes Embedded-Projekt neu zu entwickeln, empfiehlt es sich, einen passenden Software-Stack auszuwählen. Enthalten sollte er Frameworks auf höherer Ebene sowie Tools zum Erstellen von Benutzerschnittstellen, für die gesamte Umsetzung und die Datenanbindung. Die Anforderungen des Software-Stacks dienen dann als Entscheidungsgrundlage für die Hardware.

Software-Umgebungen auf Basis eines Linux-Frameworks sind zu leistungsfähigen Plattformen für Embedded-Systeme geworden. Sie enthalten Android, das ursprünglich von Google für Smartphones und Tablets entwickelt wurde, nun aber zunehmend in industriellen Systemen und Embedded-Linux-Distributionen wie Yocto zum Einsatz kommt. Diese Plattformen unterstützen bereits 3D-Grafikschnittstellen wie OpenGL, das in den meisten Mobile- und Desktop-Spielen zum Einsatz kommt – zusammen mit der Netzwerkanbindung über HTTP und TCP/IP. Sie müssen nur noch zusammengefügt und für den Entwickler zugänglich gemacht werden.

Einfacher Linux-Workflow

Integrierte Entwicklungsumgebungen (IDE, Integrated Development Environment) unterstützen die heute immer komplexer werdenden Plattformen und erleichtern die Arbeit für Anwendungsentwickler. Desktop- und Mobile-Umgebungen werden mit zahlreichen neuen Technologien ausgestattet, mit denen sich die Entwicklung animierter Benutzerschnittstellen vereinfacht. Mit entsprechenden Fähigkeiten und dem zugehörigen Wissen lassen sich diese in der Embedded-Umgebung anwenden.

Idealerweise unterstützt die IDE Desktop- sowie Embedded-Umgebungen. Damit lässt sich ein Großteil der Anwendungslogik und der Benutzerschnittstelle nativ auf der Desktop-Umgebung entwickeln und dann auf das Embedded-Target für Performance-Tests und die Endprüfung portieren. Auch ein Rapid-Prototyping wird damit sehr viel einfacher. Technologien wie virtuelle Framebuffer, die die Grafik-Schnittstelle des Targets auf dem Desktop emulieren, stellen sicher, dass die Grafiken und Animationen auch hier korrekt dargestellt werden.

Ein weiterer Aspekt der Cross-Plattform-Entwicklung ist eine einheitliche Plattform-API, wie sie die Open-Source Qt-Bibliotheken bereitstellt. Über mehr als zehn Jahre hat sich Qt als bewährte und ausgereifte Cross-Plattform-Codebasis für Desktop-, Mobile- und Embedded-Targets etabliert. Qt kommt nicht nur in Smartphones zum Einsatz, sondern auch in der Medizintechnik, in TV-Settop-Boxen, Automotive-Infotainment- und Armaturenbrett-Systemen sowie bei vielen Desktop-Applikationen.

Qt Enterprise Embedded enthält die komplette Toolchain, um Embedded-Anwendungen mit aufwändiger Grafik und umfassender Konnektivität zu schreiben.

Qt Enterprise Embedded enthält die komplette Toolchain, um Embedded-Anwendungen mit aufwändiger Grafik und umfassender Konnektivität zu schreiben.Digia

Qt Creator

Zur kürzlich vorgestellten Qt Enterprise Embedded-Umgebung gehört mit Qt Creator auch eine IDE, die Rich-Media Embedded-Entwicklung unterstützt. Qt Creator ermöglicht es dem Entwickler, sehr einfach zwischen lokaler Ausführung auf seinem Desktop und auf dem Target hin- und herzuwechseln. Denn: Der Editier-Kompilier-Debug-Zyklus läuft bei lokaler Ausführung viel schneller. Für das Target steht außerdem ein integriertes Device-Debugging zur Verfügung, mit dem Entwickler auf dem Target die gleichen Debug-Funktionen nutzen können, wie in der lokalen Umgebung.

Um Qt Creator herum gibt es ein ganzes Framework zum Erstellen grafikintensiver Embedded-Anwendungen. Die Auswahl reicht von Web-Technologien wie HTML5 bis hin zu nativen, hochleistungsfähigen Programmiersprachen wie C++. HTML5 wird von zahlreichen Benutzerschnittstellen- und Rich-Media-Entwicklern verwendet, und zwar zusammen mit Javascript für ereignisgesteuerte Schnittstellen, die Callback-Funktionen nutzen. Die Arbeit damit ist intuitiver als C++, benötigt aber viel mehr Ressourcen. Hier kommt Qt Quick ins Spiel.

Optimierte Entwicklung

Qt Enterprise Embedded basiert auf Qt Quick, das die Entwicklung hochleistungsfähiger, flüssiger Benutzerschnittstellen ermöglicht. Es nutzt native C++-Bibliotheken und OpenGL ES, um das Rendering auf die GPU und auf einen separaten Thread auf der CPU zu verlagern. Für den Designer bietet Qt Quick die deklarative Hochsprache QML, was schnelle Entwicklungszyklen und eine einfache Zusammenarbeit mit den Schnittstellenentwicklern ermöglicht.

Zu den Erweiterungen der Qt Enterprise Embedded-Umgebung zählt umfangreicher SQL-Support. Dieser erlaubt die Anbindung lokaler und netzwerkbasierter Datenbanken durch Standard-Web-orientierte Schnittstellen wie XQuery und JSON. Da die Auswahl an Technologie in dieser Rich-Media-Umgebung sehr umfangreich ist, bietet Qt Creator ein Framework zum Erstellen kunden- und domainspezifischer Editoren. Unternehmen können damit durchgängige Entwicklungssysteme erstellen, die ihre eigene, optimierte Technologie-Auswahl unterstützen, was einen reibungslosen Übergang zur Embedded-Anwendungsentwicklung ermöglicht.

Fortschrittliche Systeme

Da Embedded-Systeme heute wesentlich fortschrittlichere Benutzerschnittstellen bieten, mussten sich auch die Entwicklungstechniken ändern. Verbesserter IDE-Support sorgt dafür, dass diese Weiterentwicklung nicht nur überschaubar bleibt, sondern auch Anwendungen erstellt werden können, die für das Zielsystem optimiert sind.