Rust ile Gömülü Sistemler (Embedded) Programlama Başlangıç

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

irfo

Moderatör
Top Poster Of Month
Katılım
7 Ocak 2026
Mesajlar
290
Tepkime puanı
2
Puanları
18
Gömülü sistemler dünyası (Embedded World), geleneksel olarak C ve C++ dillerinin hakimiyetindedir. Ancak Rust, sunduğu bellek güvenliği, sıfır maliyetli soyutlamalar ve modern paket yönetimi (Cargo) ile bu alanda devrim yaratıyor. "Dangling pointer" veya "buffer overflow" gibi donanım seviyesindeki hataları derleme aşamasında yakalamak, gömülü sistem geliştiricileri için gerçek bir süper güçtür.


1. Rust Neden Gömülü Sistemler İçin İdeal?​

  • Hafıza Güvenliği: İşletim sistemi olmayan (bare-metal) ortamlarda bellek hatalarını bulmak zordur. Rust bunları en baştan engeller.
  • Küçük Çalışma Zamanı (Zero Runtime): Rust, bir çöp toplayıcıya (GC) ihtiyaç duymaz; bu da kısıtlı RAM ve CPU kaynakları olan mikrokontrolcüler için kritiktir.
  • Modern Araç Zinciri: Paket yönetimi, test ve dökümantasyon araçları C dünyasındaki karmaşık Makefile yapılarından çok daha düzenlidir.

2. Gerekli Araçlar ve Kurulum​

Gömülü sistem geliştirme için standart Rust araçlarına ek olarak birkaç özel parçaya ihtiyacınız var:

  • Target Listesi: Mikrokontrolcünüzün mimarisini (örn: ARM Cortex-M) Rust'a eklemelisiniz.
    • rustup target add thumbv7em-none-eabihf (Cortex-M4 için örnek).
  • Flip-link: Stack taşmalarına (stack overflow) karşı koruma sağlar.
  • Probe-rs: Kodunuzu donanıma yüklemek (flash) ve hata ayıklamak (debug) için kullanılır.

3. "No Standard Library" (#![no_std])​

Gömülü sistemlerde genellikle bir işletim sistemi yoktur, bu yüzden Rust'ın standart kütüphanesini (std) kullanamayız. Bunun yerine, çekirdek kütüphane olan core kullanılır.

Kod:
#![no_std] // Standart kütüphaneyi kullanma#![no_main] // Standart 'main' girişini kullanma (donanım belirleyecek)

use panic_halt as _; // Panik durumunda sistemi durduruse cortex_m_rt::entry; // Giriş noktası makrosu

#[entry]fn main() -> ! {// ! (never) tipi, bu fonksiyonun hiç bitmeyeceğini (loop) gösterir.loop {// Donanım kodları buraya gelecek}}


4. Donanım Erişim Katmanları (HAL)​

Gömülü Rust ekosistemi katmanlı bir yapıya sahiptir:

  1. PAC (Peripheral Access Crate): İşlemcinin register'larına (kaydedicilerine) en düşük seviyede erişim sağlar (genellikle SV2Rust ile üretilir).
  2. HAL (Hardware Abstraction Layer): GPIO, I2C, SPI gibi birimleri daha yüksek seviyeli ve "Rustvari" bir dille kontrol etmenizi sağlar.
  3. Board Crate: Belirli bir geliştirme kartı (örn: STM32 Nucleo veya Raspberry Pi Pico) için özel tanımlanmış kütüphanelerdir.

5. Örnek: Bir LED Yakıp Söndürme (Blinky)​

STM32 serisi bir kart için basitleştirilmiş bir örnek:

Kod:
#[entry]fn main() -> ! {let peripherals = stm32::Peripherals::take().unwrap();let gpioa = peripherals.GPIOA.split();

// PA5 pinini çıkış olarak ayarla (genellikle kart üzerindeki LED)<br>let mut led = gpioa.pa5.into_push_pull_output();<br><br>loop {<br>    led.set_high(); // LED'i yak<br>    delay(1_000_000);<br>    led.set_low();  // LED'i söndür<br>    delay(1_000_000);<br>}<br>
}


6. Güvenli Donanım Kontrolü (Ownership)​

Rust'ın sahiplik (ownership) modeli, gömülü sistemlerde donanım kaynaklarının çakışmasını önler. Örneğin, bir pin çıkış olarak bir kez "alındığında" (take), başka bir kod parçası yanlışlıkla o pini başka bir amaçla kullanamaz. Bu, "Race Condition" hatalarını donanım seviyesinde bitirir.


Özet​

Rust, gömülü sistem programlamayı korkutucu olmaktan çıkarıp modern ve güvenli bir sürece dönüştürüyor. Eğer STM32, ESP32, nRF52 veya Raspberry Pi Pico gibi bir donanıma sahipseniz, Rust ile "bare-metal" programlamaya başlamak projenizin kalitesini bambaşka bir seviyeye taşıyacaktır.
 
Geri
Üst