# Etkileşimli STM32 Mutex ve Priority Inheritance

<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" 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 active" 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-mutex-priority-lab.html">Tam Ekran Demo</a>
</div>

<div class="mlv-demo-hero">
  <div class="mlv-demo-kicker">STM32 / Ders 11</div>
  <p class="mlv-demo-lead">Bu laboratuvar, `priority inversion` sorununu yalnizca bir RTOS terimi olarak degil; `LowTask`, `MediumTask` ve `HighTask` arasinda gercekten hissedilen bir scheduler gerilimi olarak gorunur kilar. Hedef, "neden binary semaphore yetmedi, neden mutex gerekebilir?" sorusunu zaman cizelgesi, gecikme metrikleri ve kilit davranisi uzerinden sezgisel hale getirmektir.</p>
</div>

<div class="mlv-demo-grid">
  <div class="mlv-demo-panel">
    <strong>Ne Yap</strong>
    <span>Kilit politikasini, LowTask kritik bolum suresini, MediumTask CPU patlamasini ve HighTask istek zamanini degistir; ardindan scheduler'in nasil kirildigini ya da toparlandigini izle.</span>
  </div>
  <div class="mlv-demo-panel">
    <strong>Ne Ogren</strong>
    <span>`priority inversion`, `binary semaphore`, `mutex`, `priority inheritance` ve `kritik bolum` kavramlarinin neden ayni karar zincirine ait oldugunu gor.</span>
  </div>
  <div class="mlv-demo-panel">
    <strong>Gorev</strong>
    <span>Once PI olmayan kilidi dene ve HighTask'in neden bekledigini gor. Sonra ayni senaryoda mutex + PI secerek MediumTask'in nasil devreden ciktigini karsilastir.</span>
  </div>
</div>

<div class="mlv-demo-note">
Bu konu, "onceligi artir gec" kadar basit degildir. Sorun genellikle paylasilan kaynak, uzun kritik bolum ve yanlis senkronizasyon primitive seciminin ayni anda birikmesinden dogar.
</div>

<iframe
  class="mlv-demo-frame"
  src="../_static/demos/stm32-mutex-priority-lab.html"
  title="STM32 Mutex ve Priority Inheritance"
  loading="lazy"
  frameborder="0"
></iframe>

## Bu Derste Ne Oturmali?

1. `Binary semaphore`, karsilikli dislama icin bazen kullanilsa da `priority inheritance` saglamaz; paylasilan kaynak korumasi icin `mutex` genellikle daha dogru secimdir.
2. Yuksek oncelikli task, kaynagi dusuk oncelikli task tutarken bloke olursa; orta oncelikli task araya girip kilidin birakilmasini daha da geciktirebilir. Bu klasik `priority inversion` paternidir.
3. `Priority inheritance`, kilidi tutan dusuk oncelikli task'in efektif onceligini gecici olarak yukselterek mutex'in daha hizli birakilmasina yardim eder.
4. Cozum sadece "RTOS kullan" degil; kritik bolumu kisa tutmak, dogru primitive secmek ve paylasilan kaynagi acikca modellemektir.

```{note}
Bu laboratuvarin sonraki dogal adimi `tickless idle + RTC` olur; onun ardindan `event groups + software timers`, `CAN`, `USB CDC` ya da `RTOS + DMA` entegrasyonu gelebilir.
```
