Embedded Rust: Mikrodenetleyiciler İçin Rust Geliştirme

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Katılım
7 Ocak 2026
Mesajlar
290
Tepkime puanı
2
Puanları
18
Rust, "Embedded" (Gömülü Sistemler) dünyasında C ve C++'ın en güçlü alternatifi haline gelmiştir. Mikrodenetleyici seviyesinde sıfır maliyetli soyutlamalar (zero-cost abstractions) sunması ve hafıza güvenliğini (memory safety) donanım üzerinde de koruması, onu kritik sistemler için vazgeçilmez kılar.

1. No_Std Dünyası: Standart Kütüphanesiz Yaşam​

Mikrodenetleyicilerde genellikle bir işletim sistemi (Windows, Linux) yoktur. Bu yüzden Rust'ın dosya sistemi, ağ ve heap yönetimi gibi özellikler içeren standart kütüphanesini (std) kullanamayız. Bunun yerine sadece çekirdek kütüphaneyi kullanan #![no_std] moduna geçeriz.
Rust
Kod:
#![no_std] // Standart kütüphaneyi devre dışı bırakır
#![no_main] // Normal 'main' fonksiyonu yerine özel giriş noktası kullanır

use panic_halt as _; // Panik durumunda sistemi durdurur

#[riscv_rt::entry] // İşlemciye göre değişen giriş noktası
fn main() -> ! {
    loop {
        // Sonsuz döngü (Gömülü sistemlerin kalbi)
    }
}

2. PAC ve HAL Katmanları​

Gömülü Rust ekosistemi, donanıma erişimi üç temel katmanda organize eder:
  1. PAC (Peripheral Access Crate): İşlemcinin register'larına (yazmaç) doğrudan erişim sağlar. Otomatik üretilir ve "unsafe" işlemlerle doludur.
  2. HAL (Hardware Abstraction Layer): PAC üzerine inşa edilen güvenli bir katmandır. GPIO, I2C, SPI gibi protokolleri "Rust tarzı" (safe) kullanmanızı sağlar.
  3. Board Crate: Spesifik bir geliştirme kartı (örneğin Arduino Nano, STM32 BluePill) için özelleştirilmiş kütüphanedir.

3. Embedded HAL ve Tip Güvenliği​

Rust'ın en büyük gücü, donanım hatalarını derleme zamanında yakalamasıdır. Örneğin, bir pini "çıkış" (Output) olarak ayarlamadıysanız, ona veri göndermeye çalışan kod derlenmez. Buna "Typestate Programming" denir.
Rust
Kod:
let gpio = dp.GPIOA.split();
let mut led = gpio.pa5.into_push_pull_output(); // Pin artık 'Output' tipinde

led.set_high().unwrap(); // Sadece Output tipindekiler bu metodu çağırabilir

4. Araç Seti: Geliştirme İçin Gerekenler​

Gömülü sistemler için kod derlemek ve karta yüklemek için özel araçlar kullanılır:
  • target ekleme: rustup target add thumbv7em-none-eabihf (İşlemci mimarisine uygun hedef).
  • cargo-embed / probe-rs: Kodu karta yüklemek (flash) ve hata ayıklamak (debug) için kullanılır.
  • flip-link: Stack overflow hatalarına karşı donanım seviyesinde koruma sağlar.

5. Neden Embedded Rust?​

AvantajAçıklama
Bellek GüvenliğiPointer hataları ve buffer overflow (tampon taşması) tarihe karışır.
Modern Araçlarcargo sayesinde bağımlılık yönetimi ve test yazımı C dünyasından çok daha kolaydır.
Yüksek Seviyeli SözdizimiIterator, Option, Result gibi yapıları donanım üzerinde kullanabilirsiniz.
Eşzamanlılık (Concurrency)RTIC (Real-Time Interrupt-driven Concurrency) ile kesme (interrupt) tabanlı sistemler veri yarışsız yönetilir.
 
Geri
Üst