Begrænsninger i embedded: ingen RTTI, ingen exceptions
Arbejd inden for typiske embedded-undersæt, der deaktiverer RTTI og exceptions
Begrænsninger i embedded: ingen RTTI, ingen exceptions er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.
Indlejret C++
Indlejrede systemer har begrænsninger: begrænset RAM, ingen MMU og deadlines i realtid. C++'s "freestanding"-delmængde fjerner de dele af sproget, der er for dyre.
Hvorfor ingen RTTI?
RTTI (typeinformation ved kørsel) understøtter dynamic_cast og typeid. Hver polymorf klasse indeholder en ekstra pointer, og RTTI-tabeller optager kodestørrelse. Deaktiver det med -fno-rtti.
Hvorfor ingen undtagelser?
Undtagelser kræver tabeller til stack-afvikling og understøttelse ved kørsel — det øger kodestørrelsen og giver uforudsigelige tidsforløb. Mange kodebaser til indlejrede systemer bruger -fno-exceptions.
g++ -fno-rtti -fno-exceptions main.cppFejlhåndtering uden undtagelser
Brug:
- Returkoder (
std::expected,std::optional, fejlopregninger) - Outputparametre til resultater
- std::error_code til systemfejl
Resultattyper
C++23 std::expected<T, E> repræsenterer enten en værdi eller en fejl — ligesom Rusts Result. Mange projekter til indlejrede systemer bruger allerede en brugerdefineret Result-type.
std::expected<int, ErrorCode> parse(const char* s);
if (auto r = parse("42"); r) use(*r);
else log_error(r.error());Undgå dynamisk allokering
Fragmentering af heap-hukommelsen ødelægger realtidsegenskaber. I indlejret kode er new ofte forbudt uden for opstart. Brug:
- Allokering på stakken
- Statiske arrays
- Hukommelsespuljer
- Allokatorer, der er egnet til indlejrede systemer
Mønstre for statisk hukommelse
Reserver hukommelse ved kompilering eller ved opstart.
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);
// ...
};Polymorfi ved kompilering
Erstat virtuelle funktioner med templates eller CRTP, når det er muligt — ingen vtable og ingen indirekte kald.
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
Den freestanding-baserede C++-delmængde udelader det meste af <iostream>, trådunderstøttelse og dynamisk allokering. Standarden definerer udtrykkeligt, hvad der er tilgængeligt.
etl: Embedded Template Library
Embedded Template Library (ETL) leverer STL-lignende containere med en deterministisk størrelse og uden dynamisk allokering.
Bekymringer om kodestørrelse
Brug -Os til størrelsesoptimering, -flto til optimering ved linkning og -ffunction-sections -fdata-sections -Wl,--gc-sections til at fjerne ubrugt kode.
Virkeligheden: Mars-rovere og biler
C++ bruges i stor udstrækning i sikkerhedskritiske indlejrede systemer — inden for bilindustrien (AUTOSAR), luft- og rumfart (MISRA) og medicin (IEC 62304). Kodestandarder begrænser sproget yderligere.
Hurtigt tjek
Hvilket compilerflag deaktiverer understøttelse af undtagelser i C++ for at reducere binærstørrelsen?
Opsummering
Indlejret C++ deaktiverer RTTI og undtagelser af hensyn til kodestørrelse og forudsigelighed. Erstat heap-hukommelse med statisk hukommelse, brug resultattyper til fejl og CRTP til polymorfi. Kodestandarder som MISRA begrænser sproget yderligere.
Lær C++ med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 51
- Lektioner
- 203
Ofte stillede spørgsmål
Er lektionen “Begrænsninger i embedded: ingen RTTI, ingen exceptions” gratis?
Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “Begrænsninger i embedded: ingen RTTI, ingen exceptions”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Begrænsninger i embedded: ingen RTTI, ingen exceptions”?
Arbejd inden for typiske embedded-undersæt, der deaktiverer RTTI og exceptions Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på C++ Academy?
Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “Begrænsninger i embedded: ingen RTTI, ingen exceptions”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne C++ Academy-lektion?
Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Begrænsninger i embedded: ingen RTTI, ingen exceptions
- Memory-mapped I/O og volatile
- Realtidsovervejelser og latenstid
- Krydskompilering til ARM-mål