Selam beyler, uzun süredir okurum ama ilk defa konu açıyorum. Şöyle bir derdim var: ESP32-WROOM-32 modülü üzerinde FreeRTOS kullanarak bir proje geliştiriyorum. İki adet task'im var: biri yüksek öncelikli (priority 5) bir sensör okuma task'i (MPU6050'den I2C ile veri çekiyor, yaklaşık 10ms'de bir döngü yapıyor), diğeri düşük öncelikli (priority 1) bir HTTP POST task'i (JSON payload'ları server'a yolluyor, bazen 500ms'yi bulabiliyor). Sorun şu ki, yüksek öncelikli task sürekli çalıştığı için düşük öncelikli task bir türlü CPU zamanı alamıyor ve belirli bir süre sonra ESP32, Task Watchdog Timer (TWDT) hatası verip reset atıyor. vTaskDelay(10 / portTICK_PERIOD_MS) kullanıyorum yüksek öncelikli task'te ama yine de olmuyor. Acaba priority değerlerini mi yanlış veriyorum, yoksa I2C kütüphanesi içinde bir blokaj mı var? Yardımcı olursanız sevinirim, kod parçasını da aşağıya bırakıyorum:
```c
void vHighPriorityTask(void *pvParameters) {
while(1) {
readMPU6050(); // I2C read
processData();
vTaskDelay(10 / portTICK_PERIOD_MS);
}
}
void vLowPriorityTask(void *pvParameters) {
while(1) {
httpPostRequest(); // blocking HTTP
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void app_main() {
xTaskCreatePinnedToCore(vHighPriorityTask, "HighTask", 4096, NULL, 5, NULL, 0);
xTaskCreatePinnedToCore(vLowPriorityTask, "LowTask", 8192, NULL, 1, NULL, 1);
}
```
```c
void vHighPriorityTask(void *pvParameters) {
while(1) {
readMPU6050(); // I2C read
processData();
vTaskDelay(10 / portTICK_PERIOD_MS);
}
}
void vLowPriorityTask(void *pvParameters) {
while(1) {
httpPostRequest(); // blocking HTTP
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void app_main() {
xTaskCreatePinnedToCore(vHighPriorityTask, "HighTask", 4096, NULL, 5, NULL, 0);
xTaskCreatePinnedToCore(vLowPriorityTask, "LowTask", 8192, NULL, 1, NULL, 1);
}
```