CodeBlanks Logo Icon CodeBlanks

Özet - Gömülü C++

MMIO, free-standing ve interrupt'ı birleştirerek bir LED yakma uygulaması yazarsın.

Özet - Gömülü C++

Bu grupta gömülü C++'ın temel araçlarını gördün: gömülü sistem, MMIO, freestanding, interrupt ve real-time. Hepsi kısıtlı donanım üzerinde güvenilir çalışma sağlar.

Şimdi bunları bir volatile değişken örneğinde birleştireceksin. volatile ile paylaşılan değişkenleri ve ISR-style bayrakları bir arada kullanacaksın; bu, gömülü programların nasıl kurulduğunu gösterir.

Volatile + bayrak

Gömülü bir programda volatile değişkenler hem donanım kayıtçısına işaret eder hem de ISR ile paylaşılan bayrak olarak kullanılır. counter bir sayaç, ready bir bayrak olabilir; ikisi de volatile olmalıdır.

Örnek: volatile int counter = 0; volatile bool ready = false;. counter = 7; ready = true; ataması ISR'nin işi bitirdiğini ve veriyi hazırladığını bildirir. Ana döngü ready'i kontrol eder, counter'ı okur. volatile olmadan derleyici bu erişimleri bir kez yapıp atlayabilir.

Uygulama Volatile counter + bayrak yaz

Global volatile int counter = 0; ve volatile bool ready = false; tanımla. main içinde counter = 7;, ready = true; ve std::cout << counter + (ready ? 1 : 0); yaz.

Başlangıç kodu

main.cpp
#include <iostream>

// counter ve ready volatile değişkenlerini buraya tanımla

int main() {
    // counter'ı 7 yap, ready'yi true yap ve toplamı yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>

volatile int counter = 0;
volatile bool ready = false;

int main() {
    counter = 7;
    ready = true;
    std::cout << counter + (ready ? 1 : 0);
    return 0;
}

Beklenen çıktı

8

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 MMIO için hangi anahtar kelime zorunludur?

main.cpp
volatile std::uint32_t* reg = ...;
  • const
  • inline
  • static
  • volatile Doğru cevap

Açıklama: volatile, derleyicinin donanım erişimini eniyilemesini engeller.

2 volatile işaretçiyi tamamla

Soru
volatile std::uint32_t* ____ = reinterpret_cast<volatile std::uint32_t*>(&storage);
Cevap
volatile std::uint32_t* reg = reinterpret_cast<volatile std::uint32_t*>(&storage);

Açıklama: reg, storage adresine işaret eder.

3 Aracı özelliğine eşle

Kavram Anlamı
embedded Kısıtlı kaynak
MMIO Bellek eşlemeli I/O
volatile Donanım erişimi
real-time Belirli zaman

Uzman bölümündeki tüm dersler