Embedded & Mikroprozessoren Know-how sammeln

Bild: silverjohn
06.05.2014

Viele Entwickler schrecken davor zurück, Kernels zu verwenden. Dabei sind sie nützliche Werkzeuge bei der Produktentwicklung. Der Grund liegt oftmals in fehlenden Erfahrungen über die Funktionsweise und Anwendungsmöglichkeiten eines Echtzeit-Kernels – dem kann abgeholfen werden.

Ein Kernel bietet Programmierern viele nützliche Dienste wie Multitasking, Interrupt-Management, Inter-Task-Kommunikation und Signalisierung, Ressourcen- und Zeitmanagement, Verwaltung der Speicherpartitionierung und vieles mehr. Die meisten für Embedded-Systeme verwendeten Kernels sind „präemptiv“, das heißt, der Kernel wird die wichtigste Aufgabe immer zuerst ausführen. Präemptive Kernel sind auch ereignisgesteuert. Das bedeutet, dass Tasks auf eintretende Ereignisse warten, um sie auszuführen. Zum Beispiel könnte eine Task auf ein Paket warten, das auf einem Ethernet-Controller empfangen werden soll, eine andere Task auf einen ablaufenden Timer und eine weitere Task auf ein Zeichen, das von einem UART (Universal Asynchronous Receiver Transmitter) und so weiter empfangen werden soll. Wenn das entsprechende Ereignis eintritt, dann führt die Task ihre Funktion aus. Falls das Ereignis nicht eintritt, dann lässt der Kernel eine andere Task ablaufen. Wartende Tasks verbrauchen keine CPU-Zeit.

Kernel erlauben es auch Abfrageschleifen zu vermeiden, die eine schlechte Nutzung der CPU-Zeit darstellen. Echtzeit-Kernel sind nicht auf Highend-32-Bit-CPUs beschränkt. Ein Kernel wie μC/OS-III von Micrium kann auch auf vielen 8- und 16-Bit-CPUs oder sogar DSPs ablaufen.

Embedded-Programmierer scheuen sich oft vor dem Einsatz eines Kernels. Sie befürchten, dass ein Kernel die Komplexität ihrer Anwendung vergrößert. Es zeigt sich jedoch, dass sie nur einige wenige Dienste benötigen, um ein Projekt von Anfang an mit einem Kernel zu realisieren. So lassen sich mit μC/OS-III mit nur fünf API-Funktionen (Application Programming Interface) ziemlich komplexe Multitasking-Applikationen schreiben. Insgesamt bietet die μC/OS-III etwa 70 API-Aufrufe an.

Kernel von Beginn an

Vor Jahren wurden bei der Entwicklung von Embedded-Systemen zuerst der Mikroprozessor oder Mikrocontroller ausgewählt, dann die Werkzeuge (Compiler, Assembler, Linker und Debugger), und schließlich musste der Entwickler herausfinden, wie er die Software schreiben muss. Heutzutage beginnt die Entwicklung von Embedded-Systemen mit den Softwareanforderungen und der Feststellung, welche Standardsoftwarekomponenten gekauft werden können, um diese Anforderungen zu erfüllen. Ein Echtzeit-Kernel ist eine solche Komponente. Sie wird meist als erste Komponente ausgewählt, da sie den Rahmen für das Produkt vorgibt. Verfügt der Programmierer über einen Kernel, so kann er einfach weitere Softwarekomponenten wie TCP/IP- oder USB-Stacks (Host oder Device), ein Dateisystem, eine grafische Benutzeroberfläche und so weiter hinzufügen. Einige dieser Softwarekomponenten sind leicht anzuwenden, aber sehr komplex zu entwickeln. So kann ein TCP/IP-Stack aus weit über 100.000 Zeilen C-Code bestehen. Aus Sicht des Anwendungsprogrammierers werden aber nur etwa 30 API-Funktionen genutzt. Mit anderen Worten: Diese Komponenten sind leichter zu verwenden als zu programmieren.

Interna eines Echtzeit-Kernels

Die Interna des μC/OS-III-Echtzeit-Kernels sind in einem Buch mit dem Titel „μC/OS-III, The Real-Time Kernel“ beschrieben. Es gibt mittlerweile sieben verschiedene Versionen dieses Buches, die unterschiedliche CPU-Architekturen behandeln. Jedes dieser Bücher steht auf der Website von Micrium (www.micrium.com) zum kostenlosen Download zur Verfügung. Hardcover-Versionen der Bücher gibt es entweder bei Micrium, einem der autorisierten Distributoren, Amazon und anderen Online-Buchhändlern. Der Quellcode für μC/OS-III steht auf der Micrium-Website für Evaluation, Schulung und Forschung ebenfalls zum kostenlosen Download bereit. Falls der Kernel μC/OS-III für kommerzielle Produkte und Anwendungen verwendet werden soll, muss allerdings eine Lizenz erworben werden.

Evaluation-Boards: Für jedes der μC/OS-III-Bücher steht ein Evaluation-Board zur Verfügung. Der Leser kann damit nicht nur mehr über Echtzeit-Kernel erfahren, sondern auch Versuche auf aktueller Hardware durchführen. Um die in den Büchern vorgeschlagenen Beispiele auszuführen, muss der entsprechende Code heruntergeladen werden. Dieser hängt vom bevorzugten CPU-Hersteller oder der CPU-Architektur ab. Für jedes de sieben Bücher stehen Begleitprojekte auf der Micrium-Website als kostenlose Downloads zur Verfügung.

Nützliche Werkzeuge: Um den Beispielcode zu kompilieren und downzuloaden, benötigt der Anwender Werkzeuge. Diese hängen von der verwendeten Architektur und Evaluation-Boards ab. Evaluation-Versionen der Werkzeuge sind ebenfalls als kostenlose Downloads erhältlich. Die entsprechenden Links sind in jedem Buch angegeben. Um die Werkzeuge downzuloaden, muss sich der Anwender registrieren.

μC/Probe: Alle in den Büchern enthaltenen Beispiele nutzen ein leistungsfähiges, aber dennoch preiswertes Werkzeug namens μC/Probe. Dieses wird als Evaluation-Version ebenfalls kostenlos von Micrium angeboten. Eine Vollversion ist für circa 18 Euro pro Monat erhältlich.

μC/Probe ist eine Microsoft-Windows-basierte Applikation, mit der der Anwender während der Laufzeit den Wert praktisch jeder Variable oder eines jeden Speicherplatzes auf dem angeschlossenen Embedded-Zielsystem darstellen oder ändern kann. Die grafische Umgebung des μC/Probes stellt diese Werte als numerische Indikatoren, Tabellen, Grafiken, virtuelle LEDs, Balken, Schieber, Schalter, Taster und andere Komponenten dar und ordnet sie jeweils einer Variable oder einem Speicherbereich zu.

Mit dem μC/Probe muss der Zielcode nicht instrumentiert werden, um während der Laufzeit Variablen darstellen oder verändern zu können. In der Tat ist es nicht notwendig, printf()-Statements, Hardware wie LEDs (Light Emitting Diodes), LCDs oder etwas anderes hinzufügen, damit der Anwender Einblick in das Embedded-Zielsystem bekommt.

μC/Probe erhält die Werte vom Zielsystem entweder über eine J-Tag-Schnittstelle wie Segger J-Link, einen RS-232C-Port, einen Ethernet-Port mittels TCP/IP (Micriums μC/TCP-IP oder andere auf einem BSD-Sockel basierende TCP/IP-Stacks) oder einen USB-Stack (Micriums μC/USB-Device). Die kostenlose Evaluationsversion des μC/Probes bietet zwar nicht alle verfügbaren Funktionen, sie reicht aber aus, um dem Anwender eine Beurteilung der Leistungsfähigkeit und Flexibilität zu ermöglichen. μC/Probe ist μC/OS-III-orientiert und bietet Laufzeitinformationen über Tasks und andere Kernel-Objekte. Auf diese Weise lassen sich pro Task die CPU-Auslastung, Stack-Nutzung, die Anzahl der ausgeführten Tasks, die Interrupt-Abschaltzeiten und vieles mehr darstellen.

Bildergalerie

  • Die sieben μC/OS-III-Bücher stehen im PDF-Format auf der Website von Micrium zum kostenlosen Download zur Verfügung.

    Die sieben μC/OS-III-Bücher stehen im PDF-Format auf der Website von Micrium zum kostenlosen Download zur Verfügung.

    Bild: Micrium

Firmen zu diesem Artikel
Verwandte Artikel