Günstiger Alleskönner Eclipse als flexibles Entwicklungswerkzeug

»An IDE for anything and nothing in particular« – »eine IDE für alles und nichts« ließe sich das Selbstverständnis der Eclipse- Plattform übersetzen. In Wahrheit steckt eine hochflexible Architektur für leistungsfähige IDEs und Anwendungsprogramme dahinter, die sowohl für Geräteentwickler als auch Software-Komponentenanbieter interessante Features bietet.

Anbieter von Software-Komponenten wie Netzwerk- Stacks für Feldbusse oder Industrial Ethernet stehen vor einem immer gleichen Dilemma. Im Laufe des Produktlebens wächst stetig die Anzahl der zu unterstützenden Prozessoren. Daraus folgt aber auch, dass die unterschiedlichsten Entwicklungsoberflächen unterstützt werden müssen, um Support bei der Einrichtung entsprechender Projekteinstellungen für einen bestimmten Compiler geben zu können. Kommen dann noch Design- Werkzeuge für Standardaufgaben einer Entwicklung wie das Erzeugen von Objektverzeichnissen und »Application Stubs« hinzu, vervielfacht sich der Aufwand weiter. Die Lösung für diese Probleme wäre eine weitgehend einheitliche Plattform für Entwicklungsaufgaben. Solch eine Plattform muss die Entwicklung mit C bzw. C++ unterstützen, einen Dienst für die Versionsverwaltung von Quellcode (z.B. Subversion oder CVS) enthalten und idealerweise auch das Bearbeiten von Webseiten in HTML und JavaScript erlauben. Eclipse bietet genau eine solche einheitliche Plattform für die Entwicklung von Embedded- Geräten mit den genannten Features.

Des Pudels Kern – die Eclipse-Technologie

Das Eclipse-Framework entwickelte sich aus der VisualAge-Famile von IBM. Ursprünglich in SmallTalk implementiert, wurde das VisualAge- Framework für das Produkt »Visual- Age for Java ME« in Java neu geschrieben: Der Urvater von Eclipse war geboren. Im November 2001 wurde Eclipse als Open Source freigegeben und wird seit 2004 von der Eclipse Foundation betreut. Dort sind aus der Welt der Embedded-Systeme namhafte Unternehmen wie Motorola, Freescale, ARM, Atmel und Wind River zu finden. Seither ist Eclipse auf einer Reihe unterschiedlicher Betriebssysteme implementiert – Linux und Windows sind hier nur die prominentesten. Wie das Bild zeigt, ist der streng modulare Aufbau Grundprinzip bei Eclipse. Nahezu alle Komponenten lassen sich austauschen oder erweitern, da sie als so genannte Plug-ins ausgeführt sind. Die Ausführungsumgebung für diese Plug-ins wird von der OSGi-konformen Implementierung namens Equinox bereitgestellt, ebenfalls Teil des Eclipse-Projekts. Basis für die Arbeit mit Dateien ist der so genannte Workspace. Er enthält alle derzeit verfügbare Projekte sowie die dazugehörigen Dateien. Diese müssen nicht zwangsläufig auch physikalisch in den Ordnern des Workspace liegen, sie können vielmehr auch über symbolische Links eingebunden werden. Die visuelle Darstellung in Form von Editoren, Views etc. erfolgt in der Workbench. Obwohl Eclipse konsequent in Java implementiert ist, gibt es ein Grundprinzip: Widgets wie Buttons, Text- und Auswahlfelder usw. sollen auf den jeweiligen Betriebssystemen soweit möglich nicht von den nativen Widgets zu unterscheiden sein. Daher werden hier zur Darstellung nicht die in Java vorhanden Anzeigeelemente auf Basis von AWT oder Swing verwendet. Vielmehr werden, soweit vorhanden, auf der jeweiligen Plattform native Anzeigeelemente über das Java Native Interface (JNI) in Eclipse eingebunden. Dies wird über das Standard Widget Toolkit (SWT) realisiert. Daraus ergibt sich zwar eine gewisse Abhängigkeit vom unterlagerten Betriebssystem, jedoch bieten SWT-Anwendungen das vom Anwender gewohnte Look-and-Feel und erhöhen die Akzeptanz von Java-Programmen.

Die in SWT abgebildeten einzelnen Stilelemente werden über die »Jface« genannte Bibliothek zu komplexeren Konzepten zusammengefasst. Sichten auf Daten wie die Struktur eines Projekts oder die Elemente einer Datei werden in so genannten Views dargestellt. Die Bearbeitung von Dateien wie einer C-Quellcode-Datei erfolgt in Editoren. Dabei stellt Eclipse eine umfangreiche Infrastruktur für die Entwicklung neuer Editoren wie Syntax- Highlighting, Bookmarks etc. zur Verfügung. Editor und Views, die eine logische Einheit ergeben (z.B. alle Views sowie ein C-Editor für die CProgrammentwicklung) werden in Perspectives zusammengefasst. Hier zeigt sich ein weiterer Vorteil von Eclipse: Von Anfang an wurde es auf die Unterstützung möglichst vieler Sprachen ausgelegt. Die Unterstützung einer Sprache kann dabei durchaus aus mehreren Plug-ins bestehen. Solche Gruppierungen von Plug-ins werden als Feature bezeichnet. Eclipse und Java zeigen sich von Hause aus weltoffen, was die Integration in bestehende Architekturen angeht. Eclipse bietet in der Infrastruktur ein komfortables COM-Interface, um bestehende Windows-Komponenten zu integrieren. So ist das Laden eines Word-Dokuments oder das Aufrufen einer OpenOffice-Tabelle mit wenigen Zeilen Code erledigt. Java bietet weiterhin die Möglichkeit, COM-Komponenten in dieser Sprache zu verfassen. So ist die Interoperabilität mit anderen Systemen wie FDT/DTM oder TCI gesichert.

Die Pflicht – C/C++ Development Tools

C gilt nach wie vor als eine der meist verwendeten Entwicklungssprachen für Software im Embedded-Bereich. Eclipse bietet hier mit den C/C++ Development Tools (CDT) eine leistungsfähige Implementierung einer Entwicklungsumgebung für diese Sprache. Die CDT umfassen dabei Editoren für C/C++-Sourcen und -Header sowie Makefiles. Makefiles können dabei manuell verwaltet werden, es existiert aber auch Unterstützung für die Verwaltung durch CDT. Die Editoren bieten Code-Completion, also das Vervollständigen von Code-Zeilen (z.B. mit Funktionsaufrufen oder Keywords) auf Basis geparster Informationen. Diese Informationen werden mit Hilfe des integrierten Indexers erzeugt. Die Performance hat sich während der Entwicklungsgeschichte der CDT erheblich verbessert, ist allerdings bei vollständigem Parsen für Projekte in der Größenordnung des aktuellen Linux-Kernels nur auf sehr leistungsstarken Rechnern mit entsprechenden RAM-Reserven zu empfehlen. Das Starten des Compilers erfolgt direkt aus Eclipse für die jeweils unterstützen Toolchains. Weitere Toolchains können ohne Java-Programmierkenntnisse über Extension Points hinzugefügt werden. Fehler und Warnungen im Compilerlauf werden direkt in den Editoren markiert und angezeigt. Auch das Debuggen ist direkt in CDT möglich – es wird mit einer eigenen Perspective unterstützt. CDT ist längst nicht mehr nur Spielwiese für OpenSource-Enthusiasten. Vielmehr erkennen auch größere Unternehmen die Vorteile einer einheitlichen Infrastruktur für IDEs. Nicht zuletzt lässt sich viel Entwicklungsarbeit sparen, wenn man auf eine gemeinsame Basis zurückgreifen kann. So wird CDT unter anderem in der IDE „Tornado“ von Wind River, dem AVRStudio von Atmel und den Entwicklungstools von Tasking verwendet. Auch liefert Siemens für seinen Profinet-Stack samt eCos-Betriebssystem entsprechende Projekte für CDT mit.