Gömülü Sistemlere Giriş: ARM Mimarisi ve Bu Notların Kaynağı

Hazırlanan bu not serisi, gömülü sistemler alanında bireysel öğrenme sürecini yapılandırmak ve dokümante etmek amacıyla oluşturulmuştur. Odak noktası, ARM mimarisi temelinde geliştirilen STM32 mikrodenetleyici ailesidir. Bu mimarinin seçilme nedeni, hem akademik hem de endüstriyel alanda yaygınlığı ve güçlü ekosistemidir.

C Sistem ve Programcıları Derneği tarafından sunulan ARM Mikrodenetleyici Kursu, bu çalışmanın temel referans kaynağını oluşturmaktadır. Eğitmen Gürbüz Aslan tarafından sunulan sistematik anlatım, teorik altyapının yanı sıra uygulamalı bilgilerin de kazanılmasına olanak tanımıştır.

Bu içerikler, ARM Cortex-M çekirdeği ve çevresel donanımlar üzerine yapılan uygulamalı çalışmalarla zenginleştirilmiş; STM32 serisi ile entegre kullanıma yönelik yapılandırılmıştır. Hem giriş seviyesindeki kullanıcılar hem de ileri düzey geliştiriciler için kademeli bir yol haritası sunulmaktadır.

Ders içerikleri sırasıyla şunlardır:

  • ARM mimarisine giriş ve çekirdek yapısı
  • Çevresel birimlerin kullanımı (GPIO, Timer, ADC, USART, DMA)
  • C dili ile donanım seviyesinde kod geliştirme
  • IDE ve proje geliştirme araçlarının kullanımı
  • HAL, LL ve doğrudan register erişimi üzerine yazılım katmanları
  • Gerçek zamanlı sistemler ve kesme yönetimi

Tüm ders içerikleri uygulamaya dayalı olarak sunulmuştur.

Takip eden notlar, en güncelden en eskiye doğru sıralanarak düzenli bir şekilde sunulmaktadır.

Notlar, bireysel öğrenme sürecinin çıktısı olup, benzer konularda çalışanlar için yol gösterici olmayı hedeflemektedir.

Yazılım Mimarisi, Donanım Temelleri ve CMSIS

Katmanlı Yazılım, Weak Fonksiyonlar, CMOS Davranışları

ARM11 Software Layers and Hardware Basics

Bu içerikte, ARM tabanlı gömülü sistemlerde kullanılan yazılım mimarisi, katmanlı yapıların avantajları ve donanım-software etkileşiminde dikkat edilmesi gereken temel prensipler açıklanmaktadır.

Katmanlı mimarinin donanım değişimine karşı sağladığı taşınabilirlik, okunabilirlik ve test kolaylığı detaylandırılmış; CMSIS, HAL, Upper-Low Driver gibi yazılım bileşenlerinin görevleri net biçimde aktarılmıştır.

Weak fonksiyon yapısı, özellikle interrupt handler'lar gibi kullanıcı tarafından override edilebilir işlevlerde nasıl kullanıldığı örneklenmiş; `__WEAK` kavramının amacı ve sistemi nasıl esnek kıldığı açıklanmıştır.

Donanım tarafında CMOS mantığı, tristate buffer, High-Z kavramları, TTL ve Schmidt-Trigger lojik yapı farkları üzerinden kararlı sistem tasarımının temelleri aktarılmıştır.

Bu ders, hem yazılım hem donanım katmanlarının profesyonel seviyede nasıl bir araya geldiğini anlamak ve ARM mimarisine daha sağlam bakış kazanmak için hazırlanmıştır.

Multitasking, FSM ve Haberleşme Temelleri

Görev Yönetimi, Cooperative ve Preemptive Yapılar

Multitasking, FSM ve IPC

Bu derste mikrodenetleyici sistemlerinde kullanılan çok görevli yapıların temel prensipleri anlatılmıştır. Cooperative (işbirlikçi) ve Preemptive (öncelikli) multitasking yapılarına dair farklar, kullanım alanları ve avantaj-dezavantajları karşılaştırılmıştır.

Finite State Machine (FSM) yapısı, cooperative multitasking içinde görevlerin duruma bağlı yönetimi için açıklanmış; kod örnekleriyle sade bir yapı sunulmuştur. FSM, küçük sistemlerde zaman kontrolü ve görev yönetimini basitleştirir.

Prosesler arası haberleşme (IPC) yöntemleri; bayraklar, kuyruklar, semaphore ve mutex yapıları üzerinden özetlenmiş, görevler arası veri paylaşımı ve senkronizasyon ihtiyacı temel seviyede açıklanmıştır.

Ders sonunda multitasking türlerinin karşılaştırması, kullanım senaryoları ve küçük sistemlerde nasıl kurulduğu özetlenmiştir. Özellikle cooperative yapı + FSM + zaman fonksiyonlarının düşük kaynak sistemleri için ideal olduğu vurgulanmıştır.

Gömülü Sistemler - Derleme ve PLL

Dokuzuncu derste gömülü sistemlerde yazılımın donanım üzerinde çalışabilir hale gelmesini sağlayan temel süreçler teknik düzeyde ele alınmaktadır. Derleyici tarafından oluşturulan `.o` uzantılı nesne dosyalarının, linkleme süreciyle `.hex` veya `.elf` formatlarına dönüştürülmesi; bu işlemlerin neden ayrı adımlarla yapıldığı, object code’un tek başına neden yeterli olmadığı detaylandırılmaktadır.

Ayrıca startup assembly dosyalarında kullanılan `PUBWEAK` ifadesi üzerinden zayıf sembol tanımı kavramı açıklanmakta; kullanıcı tanımı yapılmadığında default fonksiyonların çalışması gibi sistematikler anlatılmaktadır. Bu yapıların IRQ handler gibi kritik işlevlerde nasıl kullanıldığı örneklenmiştir.

Load/Store mimarisi, ARM işlemcilerinin bellekle yalnızca `LDR` ve `STR` komutlarıyla etkileşim kurmasını sağlayan mimari yapı olarak işlenmektedir. Doğrudan bellekten işlem yapılmamasının sebebi, sistem tasarımı ve performans açısından değerlendirilmiştir.

Dersin son bölümünde PLL yapısı detaylı biçimde açıklanmakta; M, N ve P parametrelerinin sistem saatine etkisi üzerinden örneklemelerle gösterilmektedir. SYSCLK’in güvenli aralıkta kalması ve giriş/çıkış frekanslarının neden kritik olduğu teknik düzeyde ele alınmaktadır.

Gömülü Sistemler - Tri-State ve Başlangıç Akışı

Sekizinci derste, Tri-State buffer yapısının mantığı, High-Z (yüksek empedans) kavramı ve ARM mikrodenetleyicilerde bu yapıların nasıl uygulandığı ele alınmaktadır. Veri yolunun paylaşımı, open-drain modları ve floating girişlerin donanım seviyesinde nasıl kontrol edildiği örneklerle açıklanmaktadır.

Ayrıca çevresel birimlere clock verilme mantığı teknik olarak ele alınmakta; güç tüketimi, sistem kontrolü ve RCC yapılandırmaları ile ilişkisi detaylandırılmaktadır. CMSIS tabanlı konfigürasyon sistematiği, hedef işlemcinin tanımlanması, başlık dosyalarının dahil edilmesi ve build ayarları üzerinden doğru derleme süreci anlatılmaktadır.

Son olarak, `Run to main()` debug ayarının etkileri, `Reset_Handler`, `SystemInit`, .data/.bss segmentleri, libc init ve main() çağrısı gibi sistem başlangıç aşamaları teknik düzeyde aktarılmakta, CMSIS-mimarili sistem açılış süreci açıklanmaktadır.

Bit-banding, CMSIS, Hardware Layers

Yedinci haftada, ARM Cortex-M mimarisine özgü bit-banding tekniği ele alınmakta; atomik bit manipülasyonu gereksinimleri bağlamında kullanım gerekçeleri açıklanmaktadır. Bit-banding'in kesme güvenliği ve kod basitliği üzerindeki etkisi örneklerle sunulmaktadır.

CMSIS standardı ile birlikte donanım erişiminin nasıl sadeleştirildiği, yazılım katmanlarının (ASM, CMSIS, LL, HAL, BSP, Application) sistematik olarak nasıl inşa edildiği anlatılmaktadır. Donanım-soyutlama katmanlarının rolü üzerinden taşınabilir ve sürdürülebilir gömülü yazılım mimarilerinin temelleri aktarılmaktadır.