Inhaltsverzeichnis

Lyx – Schleifen (Loops)

Lyx bietet verschiedene Mechanismen zur Iteration. Die Sprache legt hierbei besonderen Wert auf die Unterscheidung zwischen Standard-Programmierung und sicherheitskritischer Programmierung.

 
Wichtiger Hinweis zur Zertifizierung:
In flugkritischen Systemen müssen Software-Abläufe deterministisch sein. Lyx unterstützt dies durch spezielle Spracherweiterungen, um die Anforderungen des DO-178C Standards zu erfüllen.
Details zur Problematik der Terminierung und Zeitberechnung finden Sie auf der Seite: DO-178C Compliance.

1. Die while-Schleife

Die while-Schleife führt einen Block aus, solange eine Bedingung true ergibt.

Standard (Unbounded)

Wird in unkritischen Bereichen verwendet, in denen die Laufzeit nicht exakt im Voraus berechnet werden muss.

while (x < 100) {
  x := x + 1;
}

Bounded Loop (mit limit)

In Sektionen, die mit @flight_crit markiert sind, verlangt der Compiler oft ein explizites Limit. * Syntax: while (Bedingung) limit(Konstante) { … } * Semantik: Das Limit garantiert, dass die Schleife nach N Iterationen abbricht, selbst wenn die Bedingung noch wahr ist. Dies verhindert Endlosschleifen bei Sensorfehlern.

// Garantiert Terminierung für WCET-Analyse
while (sensor_data == null) limit(1000) {
  poll_sensor();
}

2. Die for-Schleife

Die for-Schleife wird für Zählschleifen mit bekannter Schrittweite verwendet.

// Hochzählen (to)
for i := 0 to 10 {
    PrintInt(i);
}
 
// Herunterzählen (downto)
for i := 10 downto 1 {
    PrintInt(i);
}

3. Repeat-Until-Schleife

Eine fußgesteuerte Schleife, die mindestens einmal durchlaufen wird.

repeat {
    process_buffer();
} until (buffer_empty());

4. Optimierung: Energy-Aware Compiling

Lyx passt das Loop Unrolling (Schleifenabwicklung) automatisch an das @energy Level der Funktion an, um entweder Strom zu sparen oder die Latenz zu minimieren.

Level Unrolling Fokus
1 (Minimal) Maximale Energieersparnis
5 (Extreme) Maximale Performance (Durchsatz)

Siehe auch: