C++ Academy · Lektion

Echtzeitanforderungen und Latenz

Schreiben Sie Code mit vorhersehbarem Timing für Soft- und Hard-Echtzeitsysteme.

Lektion 3 von 414 Schritte

Echtzeitanforderungen und Latenz ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist Echtzeit?

Ein Echtzeit-System muss innerhalb einer Frist reagieren. Das Verfehlen von Fristen führt zu einem Fehler:

  • Harte Echtzeit — eine verfehlte Frist bedeutet einen Systemfehler (Medizintechnik, Avionik)
  • Weiche Echtzeit — verfehlte Fristen beeinträchtigen die Qualität, werden aber toleriert (Audio, Video)

Determinismus ist wichtiger als Geschwindigkeit

Echtzeit-Code bevorzugt eine vorhersagbare Laufzeit gegenüber Spitzenleistung. Eine Funktion, die immer 10 us benötigt, ist einer Funktion vorzuziehen, die 1–20 us benötigt.

Heap-Allokierungen vermeiden

Heap-Operationen sind unvorhersehbar — etwa durch Fragmentierung und Entscheidungen des Allokators. Allokieren Sie beim Start und verwenden Sie den Speicher wieder. Embedded-Codingstandards verbieten new außerhalb der Initialisierung häufig.

Ausnahmen vermeiden

Das Auslösen von Ausnahmen verursacht unvorhersehbare Kosten. Der meiste Echtzeit-C++-Code wird mit -fno-exceptions kompiliert.

Virtuelle Aufrufe in zeitkritischen Pfaden vermeiden

Virtuelle Funktionen fügen eine Indirektion hinzu und können die Verzweigungsvorhersage beeinträchtigen. Verwenden Sie Templates oder CRTP für statische Polymorphie.

Lock-Free für Determinismus

Sperren können zu einer Prioritätsumkehr führen — ein Thread mit niedriger Priorität, der eine Sperre hält, blockiert einen Thread mit hoher Priorität. Lock-Free-Datenstrukturen vermeiden dieses Problem.

Maßnahmen gegen Prioritätsumkehr

Wenn Sie Sperren verwenden müssen, bevorzugen Sie solche mit Prioritätsvererbung — das Betriebssystem erhöht vorübergehend die Priorität des Threads, der die Sperre hält.

Ausführungszeit im Worst Case (WCET)

Analysieren Sie den längsten Pfad durch Ihren Code. Werkzeuge und manuelle Analysen schätzen die maximale Anzahl an Zyklen, die eine Funktion benötigen kann. Die WCET beeinflusst die Scheduling-Entscheidungen.

Den Scheduler des Betriebssystems vermeiden

Für harte Echtzeit verwenden Sie ein RTOS (FreeRTOS, Zephyr, VxWorks) oder Bare Metal. Allgemeine Betriebssysteme können Ihre Aufgabe auf unbestimmte Zeit verzögern.

Auswirkungen von Cache und TLB

Cache- und TLB-Fehlzugriffe verursachen unvorhersehbare Verzögerungen. Sperren Sie Daten im Cache oder verwenden Sie Scratchpad-RAM für die kritischsten Abschnitte.

Speicherpools

Allokieren Sie aus vordimensionierten Pools statt aus dem allgemeinen Heap. Allokierung und Freigabe erfolgen in konstanter Zeit. Viele Embedded-C++-Projekte verwenden ausschließlich solche Pools.

Auf der echten Hardware profilieren

Die Leistung auf einer Workstation sagt wenig über die Leistung auf einem MCU aus. Führen Sie Benchmarks immer auf der Zielhardware unter realistischen Lastbedingungen durch.

Kurztest

Warum sind Heap-Allokierungen in Echtzeit-C++-Code problematisch?

Zusammenfassung

Echtzeit-C++ bevorzugt Vorhersagbarkeit gegenüber Spitzenleistung. Vermeiden Sie Heap-Allokierungen, Ausnahmen, virtuelle Aufrufe und vom Betriebssystem verwaltete Sperren. Verwenden Sie statischen Speicher, Speicherpools und Lock-Free-Strukturen und analysieren Sie die Ausführungszeit im Worst Case. Profilieren Sie auf dem tatsächlichen Zielsystem.

Kostenlos starten

Lerne C++ mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
51
Lektionen
203

Häufig gestellte Fragen

Ist die Lektion „Echtzeitanforderungen und Latenz“ kostenlos?

Ja — der vollständige Text von „Echtzeitanforderungen und Latenz“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Echtzeitanforderungen und Latenz“?

Schreiben Sie Code mit vorhersehbarem Timing für Soft- und Hard-Echtzeitsysteme. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C++ Academy zu starten?

Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Echtzeitanforderungen und Latenz“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?

Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Einschränkungen in Embedded-Systemen: kein RTTI, keine Exceptions
  2. Memory-Mapped I/O und Volatile
  3. Echtzeitanforderungen und Latenz
  4. Cross-Kompilierung für ARM-Ziele
← Zurück zu C++ Academy