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.
Die while-Schleife führt einen Block aus, solange eine Bedingung true ergibt.
Wird in unkritischen Bereichen verwendet, in denen die Laufzeit nicht exakt im Voraus berechnet werden muss.
while (x < 100) {
x := x + 1;
}
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();
}
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);
}
Eine fußgesteuerte Schleife, die mindestens einmal durchlaufen wird.
repeat {
process_buffer();
} until (buffer_empty());
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) | 4× | Maximale Energieersparnis |
| 5 (Extreme) | 8× | Maximale Performance (Durchsatz) |
Siehe auch: