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.

BASE: Soyutlanmış Donanım Katmanı ve State Machine Giriş

Taşınabilir C Yapısı, SysTick Tabanlı clock(), GPIO Soyutlama, LED Durum Makinesi

ARM BASE Structure and Abstract GPIO Layer

Bu derste, donanıma bağlı kalmadan çalışan taşınabilir bir ARM BASE yapısı oluşturulmuştur. Kod yapısı modüler olarak ayrılmış ve system, io ve main dosyaları üzerinden organize edilmiştir.

SysTick zamanlayıcısı kullanılarak clock() fonksiyonu soyutlanmıştır. Süre kontrolü donanımdan bağımsız şekilde sağlanmış ve yapı, FreeRTOS gibi sistemlerle uyumlu hale getirilmiştir.

LED blink uygulaması üzerinden init ve stable fazlarına sahip basit bir durum makinesi örneği sunulmuştur. Her bir geçiş, zaman tabanlı mantıkla yönetilmiştir.

GPIO işlemleri, IO_Init, IO_Read ve IO_Write fonksiyonlarıyla soyutlanmıştır. Tüm pin yapısı s_ios[] dizisi ile kontrol altına alınmış ve yapı farklı platformlara taşınabilir hale getirilmiştir.

Bu ders, yazılım ve donanım katmanlarının profesyonel seviyede nasıl bir araya getirildiğini göstermek ve ARM mimarisine daha sağlam bir bakış kazandırmak amacıyla hazırlanmıştır.

LCD Sürücü Sistemi

HD44780 Uyumlu Ekran Kontrolü, Printf Redirection, 4-bit Paralel İletişim

STM32F411 LCD Driver System

Bu projede STM32F411 platformu için optimize edilmiş karakter LCD sürücü kütüphanesi geliştirilmiştir. HD44780/ST7066U uyumlu kontrol çipleri ile 4-bit paralel haberleşme protokolü kullanılarak verimli kaynak kullanımı sağlanmıştır.

IAR Embedded Workbench'in __write weak fonksiyonu override edilerek printf() fonksiyonları doğrudan LCD'ye yönlendirilmiştir. Bu sayede UART/Serial port konfigürasyonuna gerek kalmadan debug çıktıları görsel olarak LCD üzerinde takip edilebilmektedir.

Gelişmiş format kontrol motoru ile terminal emülasyonu sağlanmış; escape sequence işleme, satır başı kontrolü ve ekran temizleme komutları implementasyona dahil edilmiştir. Non-blocking state machine tabanlı LED kontrolü ile real-time performans gösterilmiştir.

Donanım abstraksiyon katmanı sayesinde port/pin mapping table ile platform bağımsızlığı kazanılmış; SysTick entegrasyonu ile ARM Cortex-M4 zamanlayıcısından 1ms hassasiyetinde timing logic sağlanmıştır.

UART İletişim Protokolü

Profesyonel UART Protokolü, Multi-Port Desteği, Real-time Veri İletişimi

STM32F411 UART Communication System

Bu projede STM32F411 mikrodenetleyicisi üzerinde profesyonel seviyede UART iletişim sistemi geliştirilmiştir. Çoklu UART port desteği ile full-duplex asenkron veri iletişimi sağlanmaktadır.

Donanım seviyesinde UART1, UART2, UART3 ve UART4 portları desteklenmekte; yapılandırılabilir baud rate seçenekleri ile esnek iletişim altyapısı sunulmaktadır. 8N1 veri formatı ve comprehensive hata kontrolü ile güvenilir veri transferi gerçekleştirilmektedir.

Polling tabanlı non-blocking operasyonlar ile gerçek zamanlı veri kontrolü yapılmakta; overrun, framing ve noise error detection sistemleri entegre edilmiştir. Terminal emülasyonu için karakter bazlı send/receive API'ları geliştirilmiştir.

Modüler tasarım sayesinde kolay entegrasyon sağlanmış ve multi-tasking yapılar ile uyumlu çalışacak şekilde optimize edilmiştir. GPIO abstraksiyon katmanı üzerinden pin konfigürasyonları yönetilmektedir.

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.