FreeRTOS'ta queue, binary semaphore, counting semaphore ve mutex arasındaki farklar nelerdir? Hangisi ne zaman kullanılır?

Cevap

NesneAmaçSahiplikPriority inheritanceISR'dan verilebilir mi?
QueueVeri taşıma (kopyalayarak)YokYokEvet (FromISR)
Binary semaphoreOlay bildirimi, senkronizasyonYokYokEvet
Counting semaphoreOlay sayma veya N kaynaklı havuzYokYokEvet
MutexPaylaşılan kaynağa karşılıklı dışlamaVar: alan task bırakmalıVarHayır
Recursive mutexAynı task'ın tekrar tekrar alabildiği mutexVarVarHayır

Queue

Task'lar ve ISR'lar arasında veri iletimi. Veri queue'ya kopyalanır; büyük yapılar için pointer gönderilir (o zaman bellek sahipliğine dikkat).

typedef struct { uint8_t id; int16_t value; } msg_t;
QueueHandle_t q = xQueueCreate(16, sizeof(msg_t));

msg_t m = { .id = 1, .value = 42 };
xQueueSend(q, &m, pdMS_TO_TICKS(10));

msg_t r;
if (xQueueReceive(q, &r, portMAX_DELAY) == pdTRUE) { /* işle */ }

Binary semaphore

"Bir şey oldu" sinyali. Tipik olarak ISR verir, task bekler. Olay task işlerken iki kez gelirse biri kaybolur.

Counting semaphore

Olayları kaybetmeden saymak veya örneğin 3 adet DMA kanalından oluşan bir havuzu yönetmek için.

Mutex

Paylaşılan donanım (SPI bus, UART, LCD) veya veri yapısının korunması. Semaphore'dan farkı: sahiplik kavramı ve priority inheritance. Mutex'i başka task bırakamaz ve ISR'da kullanılamaz.

Hızlı karar rehberi

  • Veri gönderiyorum → queue
  • ISR'dan task'ı uyandırıyorum → task notification (en hızlı ve en az RAM) veya binary semaphore
  • Olay sayısını kaybetmemeliyim → counting semaphore
  • Ortak kaynağı koruyorum → mutex
  • Birden fazla olayın kombinasyonunu bekliyorum → event group

Task notifications FreeRTOS'ta binary/counting semaphore yerine kullanılabilen, ayrı nesne gerektirmeyen ve yaklaşık %45 daha hızlı bir mekanizmadır; tek kısıtı alıcının tek bir task olmasıdır.

  1. RTOS nedir? Bare-metal programlamadan farkı nedir?ZorRTOSEmbedded
  2. RTOS'ta ISR içinde hangi API'ler kullanılabilir? Deferred interrupt processing nasıl yapılır?ZorRTOSEmbedded
  3. Priority inversion nedir? Priority inheritance bu sorunu nasıl çözer?ZorRTOSEmbedded
  4. RTOS'ta preemptive priority-based scheduling nasıl çalışır? Bare-metal super loop yerine ne zaman RTOS tercih edilir?OrtaRTOSEmbedded

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle