# Etkileşimli STM32 FreeRTOS ve Gorev Zamanlama

<div class="mlv-demo-links">
  <a class="mlv-demo-link" href="index.html">STM32 Rotasi</a>
  <a class="mlv-demo-link" href="interactive_gpio_lab.html">GPIO Laboratuvari</a>
  <a class="mlv-demo-link" href="interactive_clock_timer_lab.html">Clock ve Timer</a>
  <a class="mlv-demo-link" href="interactive_uart_lab.html">UART ve Terminal</a>
  <a class="mlv-demo-link" href="interactive_pwm_lab.html">PWM Laboratuvari</a>
  <a class="mlv-demo-link" href="interactive_adc_lab.html">ADC ve Sensorler</a>
  <a class="mlv-demo-link" href="interactive_i2c_lab.html">I2C ve Sensorler</a>
  <a class="mlv-demo-link" href="interactive_interrupt_dma_lab.html">Interrupt ve DMA</a>
  <a class="mlv-demo-link" href="interactive_spi_lab.html">SPI ve Cevre Birimleri</a>
  <a class="mlv-demo-link active" href="interactive_freertos_lab.html">FreeRTOS ve Gorevler</a>
  <a class="mlv-demo-link" href="interactive_low_power_lab.html">Low Power ve Uyku</a>
  <a class="mlv-demo-link" href="interactive_mutex_priority_lab.html">Mutex ve PI</a>
  <a class="mlv-demo-link" href="interactive_tickless_idle_lab.html">Tickless Idle</a>
  <a class="mlv-demo-link" href="interactive_event_groups_lab.html">Event Groups</a>
  <a class="mlv-demo-link" href="interactive_can_filter_lab.html">CAN</a>
  <a class="mlv-demo-link" href="interactive_watchdog_fault_lab.html">Watchdog</a>
  <a class="mlv-demo-link" href="interactive_usb_cdc_ring_lab.html">USB CDC</a>
  <a class="mlv-demo-link secondary" href="../_static/demos/stm32-freertos-lab.html">Tam Ekran Demo</a>
</div>

<div class="mlv-demo-hero">
  <div class="mlv-demo-kicker">STM32 / Ders 9</div>
  <p class="mlv-demo-lead">Bu laboratuvar, FreeRTOS'u yalnizca `xTaskCreate` ve `vTaskDelay` isimlerinden ibaret degil; `task`, `priority`, `queue`, `blocking` ve `busy wait` davranislarinin sistem uzerindeki gercek etkisi olarak gorunur kilar. Burada amac, scheduler'in neden bazen akici, bazen de kaotik gorundugunu zaman cizelgesi uzerinden sezgisel olarak kavratmaktir.</p>
</div>

<div class="mlv-demo-grid">
  <div class="mlv-demo-panel">
    <strong>Ne Yap</strong>
    <span>Sensor task bicimini, task onceliklerini, queue boyutunu, sensor periyodunu ve is suresini degistir; ardindan scheduler zaman cizelgesini incele.</span>
  </div>
  <div class="mlv-demo-panel">
    <strong>Ne Ogren</strong>
    <span>`blocked task`, `ready task`, `priority`, `xQueueReceive`, `vTaskDelayUntil` ve `busy polling` farkini ayni scheduler akisinda gor.</span>
  </div>
  <div class="mlv-demo-panel">
    <strong>Gorev</strong>
    <span>Once dengeli bir ayar kur. Sonra sensor task'i busy wait'e cevir ve queue tasmasi ile starvation etkisini kendi gozunle gor.</span>
  </div>
</div>

<div class="mlv-demo-note">
RTOS, kotu tasarlanmis gorevleri sihirli bicimde duzeltmez. Yanlis oncelik, busy wait ya da kucuk queue secimi scheduler'i hizla zorlayabilir.
</div>

<iframe
  class="mlv-demo-frame"
  src="../_static/demos/stm32-freertos-lab.html"
  title="STM32 FreeRTOS ve Gorev Zamanlama"
  loading="lazy"
  frameborder="0"
></iframe>

## Bu Derste Ne Oturmali?

1. `vTaskDelayUntil`, periyodik task'in CPU'yu bos yere yakmadan belirli araliklarla calismasini saglar.
2. `xQueueReceive(..., portMAX_DELAY)`, tuketici task'i veri gelene kadar bloklar; bu, gereksiz polling yerine daha dogal bir RTOS desenidir.
3. `busy wait`, yuksek oncelikli bir task icinde yapildiginda diger task'leri kolayca ac birakabilir.
4. `queue boyutu`, veri kaybi ile gecikme arasinda bir tampon gorevi gorur; kucuk queue tasmaya, cok buyuk queue ise gecikmenin gizlenmesine yol acabilir.

```{note}
Bu laboratuvarin devaminda `mutex / priority inheritance`, `tickless idle + RTC`, `event groups + software timers` ya da `RTOS + DMA` entegrasyonu iyi calisir.
```
