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 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