C++ Academy · Lektion

Einschränkungen in Embedded-Systemen: kein RTTI, keine Exceptions

Arbeiten Sie innerhalb typischer Embedded-Teilumgebungen, in denen RTTI und Exceptions deaktiviert sind.

Lektion 1 von 414 Schritte

Einschränkungen in Embedded-Systemen: kein RTTI, keine Exceptions ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 1 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.

Eingebettetes C++

Embedded-Systeme unterliegen Einschränkungen: begrenzter RAM, keine MMU und Echtzeitfristen. Das C++-Subset „freestanding“ lässt Teile der Sprache weg, die zu ressourcenintensiv sind.

Warum kein RTTI?

RTTI (Laufzeit-Typinformationen) unterstützt dynamic_cast und typeid. Jede polymorphe Klasse enthält einen zusätzlichen Zeiger; RTTI-Tabellen erhöhen die Codegröße. Deaktivieren Sie RTTI mit -fno-rtti.

Warum keine Ausnahmen?

Ausnahmen benötigen Tabellen für das Stack-Unwinding und Laufzeitunterstützung – das erhöht die Codegröße und führt zu unvorhersehbaren Zeitabläufen. Viele Embedded-Codebasen verwenden -fno-exceptions.

g++ -fno-rtti -fno-exceptions main.cpp

Fehlerbehandlung ohne Ausnahmen

Verwenden Sie:

  • Rückgabecodes (std::expected, std::optional, Fehler-Enums)
  • Out-Parameter für Ergebnisse
  • std::error_code für Systemfehler

Ergebnistypen

C++23 std::expected<T, E> repräsentiert entweder einen Wert oder einen Fehler – ähnlich wie Rusts Result. Viele Embedded-Projekte verwenden bereits einen eigenen Result-Typ.

std::expected<int, ErrorCode> parse(const char* s);

if (auto r = parse("42"); r) use(*r);
else                       log_error(r.error());

Dynamische Allokation vermeiden

Heap-Fragmentierung kann Echtzeitsysteme zum Scheitern bringen. Embedded-Code verbietet new außerhalb der Initialisierungsphase häufig. Verwenden Sie:

  • Stack-Allokation
  • Statische Arrays
  • Memory-Pools
  • Für Embedded-Systeme geeignete Allokatoren

Muster für statischen Speicher

Reservieren Sie Speicher zur Compile-Zeit oder beim Start.

template <typename T, size_t N>
class StaticVector {
    alignas(T) char storage_[sizeof(T) * N];
    size_t size_ = 0;
public:
    void push_back(const T& v);
    // ...
};

Polymorphie zur Compile-Zeit

Ersetzen Sie virtuelle Funktionen, wenn möglich, durch Templates oder CRTP – keine vtable, keine indirekten Aufrufe.

template <typename Derived>
class Base {
public:
    void process() { static_cast<Derived*>(this)->process_impl(); }
};

class Concrete : public Base<Concrete> {
public:
    void process_impl() { /* ... */ }
};

Freestanding-Standardbibliothek

Das freestanding-Subset von C++ schließt den Großteil von <iostream>, Threading und dynamischer Allokation aus. Der Standard definiert ausdrücklich, was verfügbar ist.

etl: Embedded Template Library

Die Embedded Template Library (ETL) stellt STL-ähnliche Container mit deterministischer Größe und ohne dynamische Allokation bereit.

Überlegungen zur Codegröße

Verwenden Sie -Os zur Optimierung der Größe, -flto für die Optimierung zur Link-Zeit und -ffunction-sections -fdata-sections -Wl,--gc-sections, um ungenutzten Code zu entfernen.

Praxisbeispiel: Mars-Rover und Autos

C++ wird häufig in sicherheitskritischen Embedded-Systemen eingesetzt – in der Automobilindustrie (AUTOSAR), Luft- und Raumfahrt (MISRA) und Medizintechnik (IEC 62304). Codierungsstandards schränken die Sprache zusätzlich ein.

Kurztest

Welches Compiler-Flag deaktiviert die Unterstützung für Ausnahmen in C++, um die Binärgröße zu reduzieren?

Zusammenfassung

Embedded-C++ deaktiviert RTTI und Ausnahmen zugunsten von Codegröße und Vorhersagbarkeit. Ersetzen Sie den Heap durch statischen Speicher, verwenden Sie Ergebnistypen für Fehler und CRTP für Polymorphie. Codierungsstandards wie MISRA schränken die Sprache zusätzlich ein.

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 „Einschränkungen in Embedded-Systemen: kein RTTI, keine Exceptions“ kostenlos?

Ja — der vollständige Text von „Einschränkungen in Embedded-Systemen: kein RTTI, keine Exceptions“ 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 „Einschränkungen in Embedded-Systemen: kein RTTI, keine Exceptions“?

Arbeiten Sie innerhalb typischer Embedded-Teilumgebungen, in denen RTTI und Exceptions deaktiviert sind. 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 1 von 4.

Wie lange dauert die Lektion „Einschränkungen in Embedded-Systemen: kein RTTI, keine Exceptions“?

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