Gomulu Sistemler 1 dakika okuma

FreeRTOS Queue ve Semaphore Detayli Kullanim

FreeRTOS kuyruk ve semafor mekanizmalari: producer-consumer, mutex ve binary semaphore ornekleri.

E
Emre Cihan
· · 11 görüntüleme

IPC (Inter-Process Communication)

FreeRTOS gorevler arasi veri paylasiminda queue, semafor ve mutex kullanir.

Queue (Kuyruk)

#include 'freertos/FreeRTOS.h'
#include 'freertos/queue.h'

typedef struct {
    float sicaklik;
    float nem;
    uint32_t zaman;
} SensorVeri;

QueueHandle_t sensorQueue;

void producer(void *p) {
    SensorVeri veri;
    while (1) {
        veri.sicaklik = dht_sicaklik();
        veri.nem      = dht_nem();
        veri.zaman    = xTaskGetTickCount();

        // 100ms bekle, dolu ise bekle
        if (xQueueSend(sensorQueue, &veri, pdMS_TO_TICKS(100)) != pdPASS)
            ESP_LOGW('Q', 'Kuyruk dolu!');

        vTaskDelay(pdMS_TO_TICKS(2000));
    }
}

void consumer(void *p) {
    SensorVeri veri;
    while (1) {
        // 5 saniye bekle, veri gelince isle
        if (xQueueReceive(sensorQueue, &veri, pdMS_TO_TICKS(5000)) == pdPASS)
            ESP_LOGI('Q', 'T:%.1f H:%.1f', veri.sicaklik, veri.nem);
    }
}

void app_main(void) {
    sensorQueue = xQueueCreate(10, sizeof(SensorVeri));
    xTaskCreate(producer, 'P', 4096, NULL, 5, NULL);
    xTaskCreate(consumer, 'C', 4096, NULL, 3, NULL);
}

Mutex (Karsilikli Dislamak)

SemaphoreHandle_t spiMutex;

void spi_gorevi_1(void *p) {
    while (1) {
        if (xSemaphoreTake(spiMutex, portMAX_DELAY) == pdTRUE) {
            // Kritik bolge: SPI kullaniyor
            spi_yaz(0x10, veri1);
            xSemaphoreGive(spiMutex);
        }
        vTaskDelay(pdMS_TO_TICKS(50));
    }
}

Binary Semaphore (Kesme -> Gorev)

SemaphoreHandle_t kesme_sem;

void IRAM_ATTR gpio_isr_handler(void *arg) {
    BaseType_t yuksekOncelik = pdFALSE;
    xSemaphoreGiveFromISR(kesme_sem, &yuksekOncelik);
    portYIELD_FROM_ISR(yuksekOncelik);
}

void kesme_gorevi(void *p) {
    while (1) {
        xSemaphoreTake(kesme_sem, portMAX_DELAY);
        // Kesme islendi
        isle_gpio_olayini();
    }
}

FreeRTOS IPC mekanizmalari gorevler arasi guclu ve guvenli haberlesme saglar.

Paylaş: Twitter / X
E
Emre Cihan
Sistem Yöneticisi · Maker · Elektronik Meraklısı

İlgili yazılar

Gomulu Sistemler
STM32 Nedir? ESP32'den Farkı ve Ne Zaman Tercih Edilmeli
4 dk
Gomulu Sistemler
I2C Nedir? Çoklu Sensör Bağlantısında Neden Tercih Edilir?
4 dk
Gomulu Sistemler
RS485 Nedir? Endüstriyel Haberleşmede Neden Hâlâ Kullanılıyor?
4 dk
Gomulu Sistemler
MQTT Nedir? IoT Projelerinde Neden Bu Kadar Popüler?
4 dk