2003 yılında gömülü sistemler için geliştirilmiş olan FreeRTOS, gerçek zamanlı ve açık kaynaklı bir işletim sistemidir. Düşük güçle çalışan küçük ölçekli cihazlarda kullanılan FreeRTOS, en çok mikrodenetleyicili sistemlerde kullanılır. Kaynak yönetimi, görev zamanlama ve kesme kontrolüne olanak tanıyan FreeRTOS, sadece 4-9 KB belleğe ihtiyaç duyar. Bu sayede düşük güçlü cihazlarda dahi yüksek performans gösterir. FreeRTOS kullanımı, IoT - Nesnelerin İnterneti ve endüstriyel otomasyon sistemlerinde yaygın olarak görülür. Üstelik açık kaynak lisansı sayesinde tamamen özelleştirilebilirdir. Dolayısıyla geliştiricilere esnek ve ücretsiz bir platform sunar.
Dünya genelinde çok sayıda kullanıcının faydalandığı FreeRTOS, karmaşık projelerde dahi pratik bir şekilde yönetilebilir yapı sağlar. Sınırlı kaynaklara sahip sistemlerde dahi birden fazla görevi eş zamanlı olarak çalıştırabilmenize olanak tanıyan FreeRTOS, 40’tan fazla mikrodenetleyici mimarisini destekler. Dolayısıyla yenilikçi projelerde FreeRTOS kullanımı mümkündür. FreeRTOS kullanımı hakkında merak ettiğiniz diğer detayları içeriğin devamında bulabilirsiniz.
Genel olarak düşük seviye donanım bilgisi gerektiren FreeRTOS, kapsamlı dokümantasyona sahip olduğundan hemen herkes tarafından kısa sürede öğrenilebilir. Lisanssız olmasıyla dikkat çeken FreeRTOS işletim sistemi multitasking özelliği ile dikkat çeker. Birden fazla işin organize bir şekilde gerçekleşmesini sağlayan FreeRTOS, paralel programlama için idealdir. Üstelik multitasking özelliği sayesinde tek çekirdekli işlemcilerden çok çekirdekli işlemciler gibi verim almak mümkündür. FreeRTOS işletim sistemini kullanabilmek için ilk yapmanız gereken şey bir geliştirme ortamı oluşturmaktır. Ardından söz konusu işletim sisteminin kaynak kodlarını temin etmeniz gerekir. Bu aşamada FreeRTOS'un resmi web sitesinden yararlanabilirsiniz. İndirdiğiniz kaynak kodlarını IDE gibi bir entegre geliştirme ortamında kullanabilirsiniz.
FreeRTOS kullanımı ile donanım yapılandırmak için STM32, ESP32 gibi söz konusu işletim sistemini destekleyen bir mikrodenetleyici kullanmanız önerilir. Yapılandırma sürecinde FreeRTOS’ta bulunan bir dizi API ve kütüphaneden yararlanabilirsiniz. Örneğin, API çeşitleri ile görevler, kuyruklar ve semaforlar oluşturmak mümkündür. Görev oluşturmak için kullanmanız gereken fonksiyon ise xTaskCreate fonksiyonudur. Tüm bunların sonucunda projeyi mikrodenetleyiciye yükleyebilir, sistemin gerçek zamanlı olarak çalışmasını izleyebilirsiniz.
Sistem performansını optimize edebilmek için yapmanız gereken tek şey FreeRTOSConfig.h adlı yapılandırma dosyası düzenlemektir. Örneğin, sistem saat hızı olarak da bilinen tick rate ayarını bu dosyayı düzenleyerek yapabilirsiniz. Benzer şekilde görev önceliklerini de söz konusu dosyayı düzenleyerek kolaylıkla yapılandırabilirsiniz. Üstelik FreeRTOS düşük güç modlarını desteklediği için enerji verimliliği gerektiren projelerde rahatlıkla kullanabilirsiniz.
FreeRTOS işletim sisteminde her bir görev bağımsız olarak çalışır ve belli bir işlevi yerine getirir. Dolayısıyla FreeRTOS'ta görev - task yazmak kazanılması gereken temel bir beceridir. Sistemin yapı taşlarından bir olan görev oluşturma işlemi için xTaskCreate fonksiyonunu kullanmanız gerekir. Bu fonksiyon, görev fonksiyonunun adını, yığının - stack boyutunu, öncelik derecesini, görev parametrelerini kapsar. Örneğin, sistemde yer alan bir LED ampulün yanıp sönmesini istiyorsanız ilk etapta görev fonksiyonunu tanımlamanız, ardından ise döngüyü belirtmeniz gerekir. FreeRTOS kullanımı ile söz konusu görevi oluşturmak için tanımladığınız **void vLedTask(void *pvParameters)** fonksiyonuna for veya while eklemeniz yeterlidir. Böylece LED ışık, belirttiğiniz döngüye göre yanıp sönmeye başlar.
FreeRTOS'ta görev oluştururken birkaç noktaya dikkat etmenizde fayda vardır. Bunlardan biri görev döngüleridir. Çünkü FreeRTOS'ta her görevin sonsuz bir döngüde tekrar etmesi gerekir. Döngü sonsuz olmadığında ise silinir. Görevi askıya almak istediğinize ide vTaskDelay fonksiyonunu kullanabilirsiniz. Böyleve işlemciyi diğer görevlere bırakmış olursunuz. FreeRTOS'ta görevi 500 milisaniye askıya almak için vTaskDelay(pdMS_TO_TICKS(500)) komutunu oluşturmanız yeterlidir. komut satırındaki sayıyı değiştirerek askı süresini belirleyebilirsiniz.
Görev önceliklerini 0'dan configMAX_PRIORITIES değerine kadar ayarlamanız mümkün. Görev önceliklendirme işleminin amacı ise yüksek öncelikli işlemlerin işlemciye daha önce ulaşmasını sağlamaktır. FreeRTOS kullanımı ile görev oluştururken dikkat etmeniz gereken önemli konulardan biri de yığın boyutudur. Çünkü yığın boyutu yetersiz olduğunda stack overflow hatası ile karşılaşabilirsiniz. Yığın boyutunu doğru belirlendiğinize ise sistem performansını artırabilir, mevcut sistemi maksimum verimle kullanabilirsiniz.
FreeRTOS görevleri arasında iletişim sağlamak için kuyruklar ya da semaforlar kullanmanız gerekir. Örnek olarak, bir sensör verisini farklı bir göreve yönlendirmek istiyorsanız xQueueReceive ve xQueueSend fonksiyonlarını kullanmanız yeterlidir. Oluşturduğunuz görevi askıya almak için de vTaskSuspend ve vTaskDelete gibi API’lerden faydalanabilirsiniz. Tüm bu araçlar FreeRTOS görev yönetimini kolaylaştırır ve karmaşık projelerde dahi düzenli bir yapı oluşmasına yardımcı olur.