Haberler

RTOS Temelleri: Mikrokontrolcülerle Başlarken

Microdenetleyici birimleri (MCU’lar) ile yeni başlıyorsanız, RTOS’un ne olduğunu ve gömülü uygulamaların geliştirilmesinde ne kadar önemli olduğunu duymuş olabilirsiniz. Bugün, RTOS’un temelleri ve nasıl başlayabileceğiniz hakkında her şeyi paylaşacağım, bunlar arasında:

  • RTOS nedir ve nasıl çalışır
  • RTOS kullanmanın faydaları
  • RTOS seçerken dikkate alınması gerekenler
  • RTOS önerileri ve geliştirme platformları
  • FreeRTOS ile bir mikrodenetleyiciyi çoklu görev yapma

RTOS Nedir?

RTOS, Gerçek Zamanlı İşletim Sistemi anlamına gelir. Adından da anlaşılacağı gibi, gerçek zamanlı olarak gelen verileri işlemek veya yanıt vermek için tasarlanmış bir işletim sistemidir (OS) – ancak “gerçek zaman” ne anlama geliyor?

Gerçek zamanlı sistemler, katı zamanlama kısıtlamaları ve gereksinimleri olan zaman sınırlı sistemlerdir. Bu, işlemcinin her görevi kendisine verilen zaman kısıtlamaları içinde tamamlaması gerektiği anlamına gelir, böylece sonraki görev zamanında yürütülebilir, aksi takdirde sistem başarısız sayılır.

Ancak, RTOS’un gerçek değeri, zamanlama gereksinimlerini korurken çoklu görev yapabilme yeteneğindedir.

Bugün, RTOS birçok gömülü uygulamada kullanılmaktadır, örneğin:

  • Pacemaker gibi Tıbbi Ekipmanlar
  • Radarlar gibi Savunma Sistemleri
  • Hava Trafiği / Uçak Kontrol Sistemleri
  • Ağlı Multimedya Sistemleri

RTOS Nasıl Çalışır?

Bağlam açısından, bilgisayarınızdaki her işlemci çekirdeği gerçekte yalnızca bir programı aynı anda çalıştırabilir. Çoklu görev illüzyonu sağlamak için işletim sisteminin zamanlayıcısı, hangi programların ne zaman çalıştırılacağına karar vermekten sorumludur. Zamanlayıcı, farklı görevler arasında hızlı bir şekilde geçiş yaparak farklı programların aynı anda çalışıyormuş gibi görünmesini sağlar.

Kaynak: FreeRTOS

RTOS’taki zamanlayıcı, görev yürütme için öngörülebilir bir desenle tasarlanmıştır, bu nedenle RTOS’lar genellikle belirleyici sistemler olarak tanımlanır. Bu özellik, genellikle sahada gerçek zamanlı gereksinimleri olan gömülü sistemler için özellikle önemlidir, örneğin bir olaya katı bir zaman dilimi içinde yanıt vermek.

Örneğin, bir gömülü mikrodenetleyicinin, yaklaşan tehlikeyi belirten sensör verilerini aldıktan sonra milisaniyeler içinde bir güvenlik mekanizmasını tetiklemesi gerekebilir. Peki ya MCU’muz, bu değerli milisaniyelerde uzaktaki bir sunucu ile bağlantısını sürdürmekle meşguldü? Bekleyeceğiniz gibi – sonuçlar felaket olurdu.

Neyse ki, RTOS bu sorunu aşmanın birkaç yolunu sunar. Bir yol, sensör verisi işleme görevini uzaktan bağlantıyı sürdürmekten daha yüksek bir öncelik vermektir. Bu şekilde, zamanlayıcı zamanlama gereksinimlerini karşılamak için görevleri değiştirecektir, sensör verisi MCU meşgulken bile gelse bile.

Kaynak: FreeRTOS

RTOS’un Faydaları Nelerdir?

Geleneksel olarak, mikrodenetleyici programlaması ardışık işleme döngüleri ve durum makineleri içerir. Bu genellikle daha küçük uygulamalar için yeterli olsa da, uygulama karmaşıklığı arttıkça birçok sorun ortaya çıkar.

Bir ana sorun, ardışık kodun satır satır tamamlanması ve gerçekten kesilememesidir. Önceki örneğimize devam edersek: Sunucu bağlantısını sürdürmek için fonksiyonu çağırdığımızda, kodun tamamlanması gerekir, aksi takdirde başka bir işlem gerçekleştirilemez. Büyük ölçekli olarak, bu önemli gecikmelere neden olabilir ve zamanlama gereksinimlerini karşılamayı zorlaştırabilir.

Özetle: Bir RTOS kullanmadan karmaşık, zaman duyarlı uygulamaları başarıyla uygulayabilirsiniz, ancak süreç kesinlikle daha zor olacaktır.

Hala ikna olmadınız mı? İşte RTOS kullanmanın en önemli 3 nedeni.

1.  RTOS ile oluşturulan uygulamalar bakımı kolay ve ölçeklenebilir.

RTOS, görevlerin ihtiyaçlara göre birinden diğerine geçiş yapmasına olanak tanıyan öncelikli çoklu görev tasarım paradigması ile inşa edilmiştir. Temelde, bu, her görev için kodu ayrı ayrı oluşturmanıza olanak tanırken, RTOS’un her birinin zamanlama gereksinimlerini karşıladığından emin olmasını sağlar. Böylece, gelecekte daha fazla görev eklediğinizde mevcut kodunuzu sürdürmek daha kolay olacaktır!

2.  RTOS, önceden entegre edilmiş iletişim yığınları ve sürücülerle birlikte gelir.

Bir RTOS genellikle TCP/IP ve USB gibi iletişim yığınlarını ve bu protokolleri ve diğer çevresel birimleri desteklemek için gereken sürücüleri içerir. Bu tür işlevselliği sıfırdan uygulama veya başka belirsiz üçüncü taraf kodları tanıtma ihtiyacını ortadan kaldırarak, geliştirme süresini ve maliyetlerini önemli ölçüde azaltabilirsiniz!

3.  RTOS hata ayıklama ve analiz araçları uygulamalarınızı geliştirmeye yardımcı olur.

Uygulamalarınız boyut olarak arttıkça, hata ayıklama daha zor hale gelir. Bazen, istenmeyen bellek kullanımı veya sızıntıları gibi sorunları teşhis etmek, sistem davranışı ve kaynak kullanımı hakkında güçlü bir anlayış olmadan zor olabilir. Neyse ki, her bir göreve kaynak tahsislerini izlemenize yardımcı olacak RTOS farkındalığına sahip hata ayıklama araçları mevcuttur, örneğin Segger’in Ozone SDK’sı.


RTOS Seçimi

Yani, bir RTOS’un bir sonraki mikrodenetleyici projeniz için ilerlemenin yolu olacağına ikna oldunuz, ancak birçok seçenek arasından hangisini seçeceğinizden emin değilsiniz. Sonuçta, bu tamamen kişisel tercihinize ve proje gereksinimlerinize bağlıdır, ancak başlamanız için bazı dikkate almanız gereken noktalar burada.

“`html

RTOS Türleri

  • Hard Real Time – Görev zamanlamaları ve son tarihler çok sıkı bir şekilde yönetilir. (ör. kritik sağlık hizmetleri, uçak sistemleri)
  • Firm Real Time – Son tarihlere uyulması gerekir, ancak bu o kadar katı değildir. (ör. video konferans, GPS takibi)
  • Soft Real Time – Zamanlama kısıtlamaları mutlak değerler olarak ifade edilmez. (ör. çevrimiçi işlemler, web tarayıcıları)

RTOS Özellikleri

  • Performans – RTOS, MCU’larınızın işleme ve bellek spesifikasyonlarına göre iyi performans gösterebilir mi?
  • Özellikler – RTOS’unuzda hangi özelliklere ihtiyacınız var? (ör. dinamik bellek tahsisi)
  • Maliyet – RTOS kullanımı ücretsiz mi? Projeniz ticari ise, yazılımın lisanslama maliyetleri nelerdir?
  • Eko Sistem – RTOS, çeşitli mikroişlemci mimarilerinde çalışıyor mu? Topluluk desteği var mı?
  • Middleware – Harici yazılım bileşenleriyle entegrasyon için middleware desteği var mı?

RTOS Önerileri

Gördüğünüz gibi, bir RTOS seçmek, dikkate alınması gereken birçok faktör olduğunda gerçek bir zorluk olabilir. Yine de, bazen sadece denemek ve çeşitli seçeneklerle deney yapmak en iyisidir! Bugün, ilginizi çekebilecek üç popüler RTOS’u paylaşmak istiyorum!

Azure RTOS

Azure RTOS, Microsoft tarafından sunulan bir gömülü geliştirme paketidir ve kaynak kısıtlı cihazlarda küçük ama güçlü bir işletim sistemi sunar. Azure RTOS, TCP/IP protokolleri için Azure RTOS NetX ve yüksek performanslı dosya sistemleri için Azure RTOS FileX gibi birçok önceden entegre bileşen içerir. Pazarın en büyük oyuncularından birinden geldiği için, Azure RTOS’un öngörülebilir bir şekilde hızlı performans, sağlam güvenlik ve endüstri standartlarına uyum sunmasını bekleyebilirsiniz!

Azure RTOS’u özel kılan şey, Microsoft’un IoT bulut platformu olan Azure IoT ile sorunsuz entegrasyonudur. Bu, Azure RTOS’u çalıştıran IoT cihazlarınızı kolayca ve rahatça bağlayabileceğiniz, izleyebileceğiniz ve kontrol edebileceğiniz anlamına gelir! Geliştirme sürecinizi hızlandırmak için, bir dizi IoT protokolü, referans şablonları seçebilir veya Azure IoT cihaz SDK’sı ile IoT Plug and Play’i kullanabilirsiniz.

Azure RTOS, test ve geliştirme için ücretsizdir ve tam kaynak kodu ile başlangıç kılavuzları GitHub depolarında mevcuttur. Eğer önceden lisanslı mikrodenetleyicilerden birini kullanıyorsanız, ek bir üretim lisansı satın almanıza gerek yok!

Azure RTOS’un sundukları hakkında daha fazla bilgi edinmek için ana sayfasını ziyaret edin!

FreeRTOS

FreeRTOS, IoT RTOS sahnesinde iyi bilinen bir açık kaynak işletim sistemidir ve on yılı aşkın bir süredir kapsamlı bir şekilde geliştirilmiştir. Modüler IoT kütüphaneleri ile birlikte bir çekirdek olarak sunulmaktadır ve mikrodenetleyiciler için özel olarak geliştirilmiştir (ancak şimdi başka kullanımları da vardır). Bu nedenle, düşük bellek ayak izi ve enerji optimizasyon özellikleri de sunar. FreeRTOS, Amazon tarafından desteklenmektedir, bu da mikrodenetleyicilerinizi Amazon’un AWS IoT ile entegre etmek için kütüphanelerinden ve desteklerinden yararlanabileceğiniz anlamına gelir!

Kaynak: FreeRTOS.org

FreeRTOS ile geliştirmek tamamen ücretsizdir, çünkü MIT lisansı ile sunulmaktadır! Ayrıca, FreeRTOS’un 40’tan fazla MCU mimarisini desteklediğini bilmek sizi mutlu edecektir; bunlar arasında en son RISC-V ve ARMv8-M mikrodenetleyicileri de bulunmaktadır. Ayrıca, sürümler LTS (uzun vadeli destek) versiyonları olarak gelir, böylece FreeRTOS ile cihazlarınızın uzun ömürlü olması garanti altına alınır!

FreeRTOS ile başlamanız için daha fazla bilgi ve kılavuzlar için web sitesini ziyaret edin!

Mbed OS

Mbed OS, IoT uygulamalarında mikrodenetleyiciler için son derece popülerdir. Arm Cortex-M mikrodenetleyicilerine yönelik olarak tasarlanmıştır ve güvenlik, depolama, bağlantı, cihaz yönetimi ve sensörler & G/Ç için sürücüler dahil olmak üzere hızlı bir şekilde bağlantılı bir ürün geliştirmek için ihtiyaç duyduğunuz tüm özellikleri içerir.

Kaynak: MbedOS

MbedOS’un bir ana avantajı, Mbed Studio masaüstü IDE’sidir; bu, kod yazmanıza, hata ayıklamanıza ve uygulamalarınızı rahat ve konforlu bir şekilde dağıtmanıza olanak tanır. Ayrıca, popülaritesi sayesinde dünya genelinde binlerce geliştiriciden topluluk desteği alabilirsiniz! Mbed OS, Apache 2.0 lisansı altında yayınlanmaktadır, bu nedenle ticari ve kişisel projelerde ücretsiz olarak kullanabilirsiniz!

Bugün daha fazla bilgi edinmek için Mbed OS web sitesini ziyaret edin!


RTOS Platformları: Mikrodenetleyici Önerileri

RTOS geliştirmede doğru donanımı seçmek, yazılım kadar önemlidir! RTOS yolculuğunuza başlamak istiyorsanız, mikrodenetleyiciler için en iyi seçimlerim burada.

Seeeduino XIAO

Seeeduino XIAO, Seeeduino Ailesi’ndeki en küçük Arduino uyumlu karttır. Küçük boyutuna rağmen, Seeeduino XIAO güçlü SAMD21 mikroçipi ve çeşitli donanım arayüzleri ile donatılmıştır. Bu, Azure RTOS, FreeRTOS ve Mbed OS ile sorunsuz bir şekilde kullanabileceğiniz anlamına gelir!

Ürün Özellikleri:

  • ARM Cortex-M0+ 32bit 48MHz mikrodenetleyici (SAMD21G18) ile 256KB Flash, 32KB SRAM
  • Arduino IDE & MicroPython ile uyumlu
  • Kolay Proje İşlemi: Breadboard dostu
  • Küçük Boyut: Giyilebilir cihazlar ve küçük projeler için parmak boyutunda (20×17.5mm).
  • Birden fazla geliştirme arayüzü: 11 dijital/analog pin, 10 PWM Pin, 1 DAC çıkışı, 1 SWD Bağlantı noktası arayüzü, 1 I2C arayüzü, 1 UART arayüzü, 1 SPI arayüzü.

Seeeduino XIAO hakkında daha fazla bilgi edinmek ister misiniz? Şimdi ürün sayfasını ziyaret edin!

Wio Terminal

Wio Terminal, ATSAMD51 tabanlı tam bir Arduino geliştirme platformudur ve Realtek RTL8720DN ile güçlendirilmiş kablosuz bağlantıya sahiptir. Tümleşik bir mikrodenetleyici olarak, üzerinde 2.4” LCD Ekran, IMU, mikrofon, buzzer, microSD kart yuvası, ışık sensörü ve kızılötesi verici bulunmaktadır. Benzer şekilde, esnek ATSAMD çipi, Wio Terminal’i Azure RTOS, FreeRTOS ve MbedOS ile kullanmanıza olanak tanır!

“`

Ürün Özellikleri:

  • Güçlü MCU: ARM Cortex-M4F çekirdeğine sahip Microchip ATSAMD51P19, 120MHz hızında çalışıyor
  • Güvenilir Kablosuz Bağlantı: Realtek RTL8720DN ile donatılmış, çift bantlı 2.4GHz / 5GHz Wi-Fi (sadece Arduino tarafından desteklenmektedir)
  • Yüksek Entegre Tasarım: 2.4” LCD Ekran, IMU ve daha pratik ek bileşenler, yerleşik mıknatıslar ve montaj delikleri ile kompakt bir kasada yer alıyor
  • Raspberry Pi 40-pin Uyumlu GPIO
  • IoT ile keşfetmek için 300’den fazla tak-çalıştır Grove modülü ile uyumlu
  • USB OTG Desteği
  • Arduino, CircuitPython, Micropython, ArduPy, AT Firmware, Visual Studio Code desteği
  • TELEC Sertifikalı

Bir Wio Terminal almakla ilgileniyorsanız, lütfen Seeed Online Store’daki ürün sayfasını ziyaret edin!

Raspberry Pi Pico

Bugünkü son önerimiz, Raspberry Pi Vakfı’nın en son mikrodenetleyici sunumu olan Raspberry Pi Pico! Raspberry Pi RP2040 üzerinde çalışıyor, bu da 133MHz saat hızına kadar çalışabilen çift çekirdekli ARM Cortex M0+ işlemcisidir. Pazarın sadece kısa bir süredir mevcut olmasına rağmen, bu esnek kart için RTOS geliştirmeleri zaten başlamıştır, daha fazla bilgi için buraya tıklayın!

Ürün Özellikleri:

  • Çift çekirdekli ARM Cortex M0+ işlemci, esnek saat hızı 133 MHz’e kadar
  • 264KB SRAM ve 2MB yerleşik Flash bellek
  • Lehimleme için doğrudan taşıyıcı kartlara bağlanabilen castellated modül
  • USB 1.1 Ana Bilgisayar ve Cihaz desteği
  • Düşük güç tüketimli uyku ve bekleme modları
  • Kapsamlı C/C++/Micropython SDK, yazılım örnekleri ve belgeler
  • USB üzerinden kütle depolama kullanarak sürükle ve bırak programlama
  • 26 × çok işlevli GPIO pinleri
  • 2 × SPI, 2 × I2C, 2 × UART, 3 × 12-bit ADC, 16 × kontrol edilebilir PWM kanalları
  • Doğru saat ve zamanlayıcı entegre
  • Sıcaklık sensörü
  • Hızlandırılmış kayan nokta kütüphaneleri entegre
  • Özel çevresel destek için 8 × Programlanabilir G/Ç (PIO) durum makineleri

Raspberry Pi Pico hakkında daha fazla bilgi edinmek için, lütfen Seeed Online Store’daki ürün sayfasını ziyaret edin!


Demonstrasyon: Wio Terminal’da FreeRTOS Çalıştırma

RTOS’lar çok esnek ve mikrodenetleyicilerimizden en iyi şekilde yararlanmak için harika bir çözümdür. Bugün, Wio Terminal’da FreeRTOS ile çoklu görevlerin nasıl gerçekleştirileceğine dair basit bir öğretici ve gösterim paylaşmak istiyorum.

Gerekli Malzemeler

Takip etmek için, SAMD mikroçipine dayanan herhangi bir mikrodenetleyici kartımızı kullanabilirsiniz. Bu, şunları içerir:

FreeRTOS ile Arduino’ya Hızlı Başlangıç

Adım 1: Seeed_Arduino_FreeRTOS deposunu ZIP dosyası olarak indirin.

Adım 2: ZIP dosyasını Arduino IDE üzerinden bir kütüphane olarak yükleyin. Lütfen detaylı talimatlar için buraya bakın.

Adım 3: Aşağıdaki kodu yeni bir skeç içine kopyalayın ve Arduino kartınıza yükleyin.

#include <Seeed_Arduino_FreeRTOS.h>
 
TaskHandle_t Handle_aTask;
TaskHandle_t Handle_bTask;
 
static void ThreadA(void* pvParameters) {
    Serial.println("Thread A: Başlatıldı");
 
    while (1) {
        Serial.println("Merhaba Dünya!");
        delay(1000);
    }
}
 
static void ThreadB(void* pvParameters) {
    Serial.println("Thread B: Başlatıldı");
 
    for (int i = 0; i < 10; i++) {
        Serial.println("---Bu Thread B---");
        delay(2000);
    }
    Serial.println("Thread B: Siliniyor");
    vTaskDelete(NULL);
}
 
void setup() {
 
    Serial.begin(115200);
 
    vNopDelayMS(1000); // usb sürücüsünün başlangıçta çökmesini önler, bunu atlamayın
    while(!Serial);  // Program başlamadan önce Seri terminalin portu açmasını bekleyin
 
    Serial.println("");
    Serial.println("******************************");
    Serial.println("        Program başlıyor      ");
    Serial.println("******************************");
 
    // rtos tarafından yönetilecek thread'leri oluşturun
    // Her görevin yığın boyutunu ve önceliğini ayarlar
    // Ayrıca, görevlerle iletişim kurmak ve görevlerden bilgi almak için önemli olan her görev için bir işleyici işaretçisi başlatır
    xTaskCreate(ThreadA,     "Görev A",       256, NULL, tskIDLE_PRIORITY + 2, &Handle_aTask);
    xTaskCreate(ThreadB,     "Görev B",       256, NULL, tskIDLE_PRIORITY + 1, &Handle_bTask);
 
    // RTOS'u başlatın, bu işlev asla geri dönmeyecek ve görevleri planlayacaktır.
    vTaskStartScheduler();
}
 
void loop() {
    // HİÇBİR ŞEY
}

Adım 4: Arduino IDE’de Seri Monitörü açın ve sihrin gerçekleşmesini izleyin!

Bu Merhaba Dünya Örneği, farklı hızlarda Seri Monitöre farklı dizeler yazdıran iki thread oluşturur.

  • Thread A “Merhaba Dünya” yazdırır,
  • Thread B ise “—Bu Thread B—” yazdırır!

Ve bu hızlı öğreticinin sonuna geldik!


Sonuç & Daha Fazla Kaynak

Böylece, bu makalenin sonuna geldik! RTOS temelleri hakkında daha net bir fikir edinmişsinizdir ve bunların mikrodenetleyici geliştirme için neden önemli olduğunu anlamışsınızdır. Paylaştığım detayların ötesinde daha fazla RTOS keşfetmek isterseniz, RT-Thread OS, μC/OS veya SAFERTOS gibi kaynakları da keşfetmek isteyebilirsiniz.

Ayrıca yardımcı olabilecek bazı ek kaynaklar burada!

Leave a Reply

Your email address will not be published. Required fields are marked *