0Pricing
C++ Academy · Ders

Gömülü Sistemlerde Kısıtlamalar: RTTI Yok, İstisna Yok

RTTI ve istisnaları devre dışı bırakan tipik gömülü sistem alt kümeleri içinde çalışın

Gömülü Sistemlerde Kısıtlamalar: RTTI Yok, İstisna Yok, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.

Gömülü C++

Gömülü sistemlerin kısıtları vardır: sınırlı RAM, MMU olmaması ve gerçek zamanlı son tarihler. C++'ın "bağımsız" alt kümesi, dilin maliyeti çok yüksek olan bölümlerini çıkarır.

Neden RTTI Yok?

RTTI (Çalışma Zamanı Tür Bilgisi), dynamic_cast ve typeid desteği sağlar. Her çok biçimli sınıf ek bir işaretçi taşır; RTTI tabloları kod boyutunu artırır. -fno-rtti ile devre dışı bırakın.

Neden İstisnalar Yok?

İstisnalar, yığın çözme tablolarına ve çalışma zamanı desteğine ihtiyaç duyar; bu da kod boyutunu artırır ve zamanlamayı öngörülemez hâle getirir. Gömülü kod tabanlarının çoğu -fno-exceptions kullanır.

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

İstisnalar Olmadan Hata İşleme

Şunları kullanın:

  • Dönüş kodları (std::expected, std::optional, hata numaralandırmaları)
  • Sonuçlar için çıkış parametreleri
  • Sistem hataları için std::error_code

Sonuç Türleri

C++23 std::expected<T, E>, Rust'taki Result gibi bir değeri veya hatayı temsil eder. Gömülü projelerin çoğu zaten özel bir Result türü kullanır.

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

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

Dinamik Ayırmadan Kaçınma

Yığın parçalanması, gerçek zamanlı sistemleri ciddi biçimde etkiler. Gömülü kodlar genellikle başlangıç işlemleri dışında new kullanımını yasaklar. Şunları kullanın:

  • Yığın ayırma
  • Statik diziler
  • Bellek havuzları
  • Gömülü sistemlere uygun ayırıcılar

Statik Bellek Desenleri

Belleği derleme zamanında veya başlangıç sırasında ayırın.

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

Derleme Zamanı Çok Biçimliliği

Mümkün olduğunda sanal işlevleri şablonlarla veya CRTP ile değiştirin; böylece sanal işlev tablosu ve dolaylı çağrılar olmaz.

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

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

Bağımsız Standart Kitaplık

Bağımsız C++ alt kümesi, <iostream>'in büyük bölümünü, iş parçacığı desteğini ve dinamik bellek ayırmayı içermez. Standart, nelerin kullanılabilir olduğunu açıkça tanımlar.

ETL: Gömülü Şablon Kitaplığı

Gömülü Şablon Kitaplığı (ETL), belirli boyutlu ve dinamik bellek ayırmayan STL benzeri kapsayıcılar sağlar.

Kod Boyutuyla İlgili Kaygılar

Boyut optimizasyonu için -Os, bağlama zamanı optimizasyonu için -flto, kullanılmayan kodu kaldırmak için -ffunction-sections -fdata-sections -Wl,--gc-sections kullanın.

Gerçek Dünya: Mars Araçları ve Otomobiller

C++, güvenlik açısından kritik gömülü sistemlerde yaygın olarak kullanılır: otomotiv (AUTOSAR), havacılık ve uzay (MISRA) ve tıp (IEC 62304). Kodlama standartları dili daha da kısıtlar.

Hızlı Kontrol

C++'ta ikili dosya boyutunu azaltmak için istisna desteğini devre dışı bırakan derleyici seçeneği hangisidir?

Özet

Gömülü C++, kod boyutu ve öngörülebilirlik için RTTI'yi ve istisnaları devre dışı bırakır. Yığın yerine statik bellek kullanın; hatalar için sonuç türlerinden, çok biçimlilik için CRTP'den yararlanın. MISRA gibi kodlama standartları dili daha da kısıtlar.

Sıkça Sorulan Sorular

“Gömülü Sistemlerde Kısıtlamalar: RTTI Yok, İstisna Yok” dersi ücretsiz mi?

Evet — “Gömülü Sistemlerde Kısıtlamalar: RTTI Yok, İstisna Yok” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.

“Gömülü Sistemlerde Kısıtlamalar: RTTI Yok, İstisna Yok” dersinde ne öğreneceğim?

RTTI ve istisnaları devre dışı bırakan tipik gömülü sistem alt kümeleri içinde çalışın C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C++ Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Gömülü Sistemlerde Kısıtlamalar: RTTI Yok, İstisna Yok” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Gömülü Sistemlerde Kısıtlamalar: RTTI Yok, İstisna Yok
  2. Bellek Eşlemeli IO ve Volatile
  3. Gerçek Zamanlı Sistemlerde Dikkat Edilecekler ve Gecikme
  4. ARM Hedefleri İçin Çapraz Derleme
← C++ Academy Sayfasına Dön