FreeRTOS'ta Öncelik Tersinmesi ve Mutex Kalıtımı

2 Haziran 2026 1 dk okuma 3 görüntülenme

Öncelik tersinmesi, gömülü sistemlerdeki en sinsi zamanlama hatalarından biridir: yüksek öncelikli bir görev, teorik olarak hiç beklememesi gereken düşük öncelikli bir görevi beklemeye başlar.

Senaryo

Düşük öncelikli L görevi bir kaynağı kilitler. Yüksek öncelikli H görevi aynı kaynağı ister ve bloke olur. Bu sırada orta öncelikli M görevi çalışmaya başlayarak L'yi de bekletir; sonuçta H, M'nin arkasında kalır.

Çözüm: öncelik kalıtımı

FreeRTOS'ta xSemaphoreCreateMutex() ile oluşturulan mutex'ler öncelik kalıtımını destekler: kaynağı tutan L görevi geçici olarak H'nin önceliğine yükseltilir ve kaynağı hızla bırakır.

Sayaç semaforu (xSemaphoreCreateBinary) öncelik kalıtımı yapmaz. Karşılıklı dışlama için her zaman mutex kullanın.

Pratik öneriler

  • Kritik bölümleri olabildiğince kısa tutun.
  • Kesme bağlamında mutex kullanmayın.
  • Zamanlama sorunlarını Tracealyzer/SystemView ile görselleştirin.
Paylaş: