Betriebssysteme

Windows Embedded Compact 7 Echtzeit-Tuning

Seite: 2/2

Anbieter zum Thema

Für diese Sonderfälle bietet Windows Embedded Compact eine Lösung: Die Implementierung spezifischer Interrupthandling-Mechanismen in „Installable ISRs“ (IISR). Diese sind nicht Teil des Kernels, sondern werden während der Systemausführung installiert. Demnach identifiziert der generische ISR-Code erst die Interruptquelle mit generischer Identifikation. Dann wird die IISR aufgerufen und sucht nach spezifischen Interrupt Handlern.

Aspekte der Echtzeitoptimierung von Windows Embedded Compact

Unser wichtigstes Anliegen ist grundsätzlich die Optimierung des gesamten Interrupt Managements. Zum einen, um die für das Interrupt Management aufgewendete Zeit zu verkürzen und zum anderen, um die die Reaktionsfähigkeit des Systems zu verbessern und damit Echtzeitbedingungen zu ermöglichen. Wie bereits beschrieben, lässt sich eine Optimierung über ISR und IST erreichen. Allerdings ist dieser Lösungsansatz komplex und kann Auswirkungen auf das Hardwaredesign haben.

Der Softwareentwickler sollte zunächst:

  • die Hardware verstehen,
  • verschachtelte Interrupts verwenden (Prioritäten in der Hardware festlegen),
  • verkettete Interrupts vermeiden (je nach Anzahl der Geräte sehr zeitaufwändig),
  • Prioritätsumkehrung oder -vererbung vermeiden.

Verschachtelte Interrupts: Auf einem Prozessor sind die IRQs priorisiert. Wenn nun der Kernel vor dem ISR-Aufruf Interrupts maskiert, kann ein höherpriores IRQ die Ausführung der ISR stoppen. Wird dieses Verhalten mit den Echtzeitanforderungen verknüpft, lässt sich die Reaktionsfähigkeit der ISR auf einen externen Stimulus verbessern. Leider unterstützen ARM-Prozessoren die IRQ-Prioritätsmechanismen meist nicht. Daher sollten zwei Lösungsansätze betrachtet werden:

  • Optimieren der Default-ISR und Reaktivierung der höherprioren Interrupts; Wiederverwendbarkeit der ISR sicherstellen,
  • Verwenden der FIQ-Linie (Fast IRQ) zum „Überholen“ aller anderen Interrupts.

Verkettete Interrupts: Wie beschrieben, bezeichnet ein verketteter Interrupt eine einzelne Interrupt-Linie, die von mehreren Geräten gemeinsam genutzt wird. In diesem Fall aktiviert die ISR nacheinander die für die spezifizierte ISR-Linie registrierten IISRs, bis die Interruptquelle identifiziert ist.

Auch wenn das System optimiert wurde, kann die Identifizierung des Interrupts in jeder IISR einige Mikrosekunden dauern. Möglicherweise ist auch ein Speicherzugriff erforderlich, um die Register der verbundenen Geräte auszulesen. Wenn der Interrupt erst von der letzten abgefragten IISR kommt, muss das System längere Zeit im Kernel zubringen.

Das Vermeiden von Shared Interrupts stellt sicher, dass für das Interrupt-Handling nur die festgelegte Zeit aufgewendet wird.

Thread-Prioritätsinversion:Bei manchen Thread-Sperrzuständen kann der Kernel die Prioritäten der sperrenden Threads vorübergehend erhöhen, um die Freigabe der gesperrten Systemressource zu ermöglichen. Diesen Vorgang bezeichnet man als Prioritätsinversion.

Durch Vermeiden einer maximalen Prioritätsinversion wird verhindert, dass der Kernel zusätzlich Zeit aufwenden muss, um Systemthreads und Systemsperren bis zur Beendigung des Threads neu festzusetzen. Der Einsatz von Prioritätsinversionen lässt sich zwar reduzieren, ist jedoch vor allem in komplexen Systemen selten vollständig zu umgehen.

Wege zur Validierung der Echtzeitfähigkeit

Die Validierung von Echtzeitfähigkeit auf echter Hardware im realen Systemkontext ist unerlässlich und kann auf verschiedene Art und Weise umgesetzt werden:

Interrupt-Latenzzeit: Die Validierung von Echtzeitfähigkeit auf echter Hardware im realen Systemkontext ist unerlässlich und kann auf verschiedene Art und Weise umgesetzt werden:

IlTiming: Dieses softwarebasierte Echtzeit-Messtool misst ISR- und IST-Latenzzeiten.

OSBench: Die OSBench-Applikation führt Timing-Tests der Scheduler-Performance durch. Damit lässt sich die Dauer verschiedener Kernel-Tasks ermitteln, wie z.B. das Erfassen oder Freigeben kritischer Abschnitte, Warten oder Signalisieren eines Events oder Aufrufe der System-APIs.

Kernel Tracker: Der Kernel Tracker zeigt die Interaktion zwischen Prozessen, Threads und Interrupts. Er protokolliert Interrupts, TLB-Fehler und Prioritätsinversionen.

"Out-of-Bounds"-Systemtests: Ein System lässt sich außerhalb des Sollzustandes testen, indem System-CPU und Speicher überladen werden.

Fazit: Wie die Echtzeitfähigkeit eines Systems zu optimieren ist, hängt von den Echtzeitanforderungen, dem Hardwaredesign und den Systeminteraktionen ab. Eine Systemoptimierung durch Interrupt-Management, Thread-Prioritäten und Resource Sharing ist oft eine große Herausforderung. Dieser Artikel zu Windows Embedded Compact 7 kann nicht für jede Konfiguration den optimalen Lösungsansatz liefern. Er soll vielmehr das Bewusstsein von Entwicklern stärken, bestimmte Ziele durch neue oder bekannte Routinen und Lösungsmöglichkeiten zu erweitern.

* * Nicolas Besson ist für den Engineering-Services-Anbieter und Windows Embedded Gold Partner Adeneo Embedded tätig.

Artikelfiles und Artikellinks

(ID:24924510)