STM32 / Ders 9 / FreeRTOS

Ayni is yukunu ya akici kurarsin ya da scheduler'i bogarsin.

Bu laboratuvar, periyodik bir SensorTask, queue'dan veri bekleyen bir ControlTask ve arka planda calisan bir LoggerTask uzerinden FreeRTOS scheduler mantigini gorunur kilar. Burada dogru bloklama ve oncelik secimi akisi sakinlestirir; busy wait ve yanlis oncelik ise ayni sistemi kisa surede kaotik hale getirir.

Kontroller

Task davranisi, oncelik ve queue ayarlarini degistir

Ipuccu: Once SensorTask'i `vTaskDelayUntil` ile bloklu tut ve ControlTask'i queue'dan veri beklerken uyut. Sonra sensoru busy wait yapip farki izle.

0 Uretilen ornek
0 Islenen ornek
0 Queue drop
0 Context switch
0 tick Ortalama cevap
0 Logger runtime

Scheduler Ozet

Task dogasi, oncelik ve queue durumu

Scheduler bu demoda her tick'te en yuksek oncelikli ready task'i secen basit bir preemptive mantikla modellenir.

Zaman Cizelgesi

24 tick pencerede task durumu, secilen CPU gorevi ve queue derinligi
SensorTask Periyodik ornek uretimi; bloklanabilir ya da busy wait olabilir.
ControlTask Queue'dan veri gelirse uyanir, yoksa bloklanir.
LoggerTask Arkaplanda 6 tick'te bir log flush etmeye calisir.
CPU Scheduler'in bu tick'te sectigi aktif task.
Queue Tick sonundaki queue derinligi.
SensorTask running ControlTask running LoggerTask running Ready Blocked Queue full / drop riski

Transcript ve Teshis

Hangi RTOS deseni iyi, hangisi riskli?

Gorev ve Kod

FreeRTOS API ile bagla
Gorev: Once dengeli bir scheduler kur. Sonra SensorTask'i busy wait yapip yuksek oncelige cek ve ControlTask'in nasil ac kaldigini izle.

Baslangic ayari dengeli: SensorTask periyodik olarak bloke oluyor, ControlTask queue'dan veri beklerken uyuyor ve LoggerTask kalan bosluklari dolduruyor.


          

Mini Quiz

RTOS sezgisini cümleye cevir

1. `xQueueReceive(..., portMAX_DELAY)` neden guclu bir RTOS desenidir?

2. Yuksek oncelikli bir task neden busy wait yaptiginda sistemi bozabilir?

3. Queue boyutu kucukse en tipik risk nedir?