C++ Academy · Lektion

Begränsningar i inbyggda system: inget RTTI, inga exceptions

Arbeta inom typiska delmängder för inbyggda system där RTTI och exceptions är avstängda

Lektion 1 av 414 steg

Begränsningar i inbyggda system: inget RTTI, inga exceptions är en gratis lektion i C++ Academy på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för C++ Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i C++ Academy innehåller totalt 4 lektioner.

Inbäddad C++

Inbäddade system har begränsningar: begränsat RAM, ingen MMU och tidsfrister i realtid. C++-delmängden för freestanding-miljöer tar bort delar av språket som är för kostsamma.

Varför ingen RTTI?

RTTI (Run-Time Type Information) stöder dynamic_cast och typeid. Varje polymorf klass innehåller en extra pekare, och RTTI-tabeller tar upp kodutrymme. Inaktivera med -fno-rtti.

Varför inga undantag?

Undantag kräver tabeller för stackunwinding och stöd under körning, vilket ökar kodstorleken och ger oförutsägbar tidsåtgång. Många kodbaser för inbäddade system använder -fno-exceptions.

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

Felhantering utan undantag

Använd:

  • Returkoder (std::expected, std::optional, feluppräkningar)
  • Utparametrar för resultat
  • std::error_code för systemfel

Resultattyper

C++23 std::expected<T, E> representerar antingen ett värde eller ett fel – ungefär som Rusts Result. Många inbäddade projekt använder redan en anpassad Result-typ.

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

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

Undvika dynamisk allokering

Heapfragmentering är förödande i realtidssystem. Kod för inbäddade system förbjuder ofta new efter uppstarten. Använd:

  • Allokering på stacken
  • Statiska arrayer
  • Minnespooler
  • Allokerare anpassade för inbäddade system

Mönster för statiskt minne

Reservera minne vid kompilering eller uppstart.

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);
    // ...
};

Polymorfism vid kompilering

Ersätt virtuella funktioner med mallar eller CRTP när det är möjligt – ingen vtable och inga indirekta anrop.

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

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

Freestanding-standardbibliotek

C++-delmängden för freestanding-miljöer utesluter det mesta av <iostream>, trådhantering och dynamisk allokering. Standarden definierar uttryckligen vad som är tillgängligt.

etl: Embedded Template Library

Embedded Template Library (ETL) tillhandahåller STL-liknande containrar med deterministisk storlek och utan dynamisk allokering.

Hänsyn till kodstorlek

Använd -Os för storleksoptimering, -flto för optimering vid länkning och -ffunction-sections -fdata-sections -Wl,--gc-sections för att ta bort oanvänd kod.

I verkligheten: Marsbilar och bilar

C++ används i stor utsträckning i säkerhetskritiska inbäddade system – inom fordonsindustrin (AUTOSAR), flyg- och rymdindustrin (MISRA) samt medicinteknik (IEC 62304). Kodningsstandarder begränsar språket ytterligare.

Snabbkontroll

Vilken kompilatorflagga inaktiverar stöd för undantag i C++ för att minska binärfilens storlek?

Sammanfattning

Inbäddad C++ inaktiverar RTTI och undantag för att minska kodstorleken och öka förutsägbarheten. Ersätt heapen med statiskt minne, använd resultattyper för fel och CRTP för polymorfism. Kodningsstandarder som MISRA begränsar språket ytterligare.

Gratis att börja

Lär dig C++ med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
51
Lektioner
203

Vanliga frågor

Är lektionen ”Begränsningar i inbyggda system: inget RTTI, inga exceptions” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen C++ Academy, inklusive ”Begränsningar i inbyggda system: inget RTTI, inga exceptions”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i C++ Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Begränsningar i inbyggda system: inget RTTI, inga exceptions”?

Arbeta inom typiska delmängder för inbyggda system där RTTI och exceptions är avstängda Ni övar på C++ Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig C++ Academy?

Du behöver inga förkunskaper. Utbildningen i C++ Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”Begränsningar i inbyggda system: inget RTTI, inga exceptions”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här C++ Academy-lektionen?

Ja. Varje C++ Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Begränsningar i inbyggda system: inget RTTI, inga exceptions
  2. Minnesmappad I/O och volatile
  3. Realtidsöverväganden och latens
  4. Korskompilering för ARM-mål
← Tillbaka till C++ Academy