Dual-Core FreeRTOS Mimarisi
Task Yapısı
┌──────────────────────────────────────────────────┐
│ ESP32 Dual-Core (FreeRTOS) │
├────────────────────────┬─────────────────────────┤
│ CORE 0 (PRO_CPU) │ CORE 1 (APP_CPU) │
│ │ │
│ Network Task │ Modbus Task │
│ Priority: NORMAL │ Priority: HIGH │
│ Stack: 12KB │ Stack: 6KB │
│ • WiFi Driver │ • RS485 Polling │
│ • MQTT Client │ • Register Parsing │
│ • BLE Provisioning │ • Template Mapping │
│ • OTA Handler │ • Raw Mode │
│ • Telemetry TX │ • Backpressure Control │
│ • Command RX │ │
│ │ App Task │
│ │ Priority: LOW │
│ │ Stack: 3KB │
│ │ • Button Handler │
│ │ • LED Controller │
│ │ • State Machine │
│ │ • Watchdog Feed │
└────────────────────────┴─────────────────────────┘
Toplam stack: 21KB / ~320KB kullanılabilir
Inter-Task İletişim
FreeRTOS Queue'lar
| Kuyruk | Kapasite | Item Boyutu | Yön |
|---|---|---|---|
| TelemetryQueue | 15 | 1KB | Modbus → Network |
| CommandQueue | 10 | — | Network → Modbus |
| StatusQueue | 5 | — | Modbus → App |
Event Group Bayrakları (16 flag)
TASK_EVT_WIFI_CONNECTED/DISCONNECTEDTASK_EVT_MQTT_CONNECTED/DISCONNECTEDTASK_EVT_DEVICE_CLAIMED/UNCLAIMEDTASK_EVT_OTA_STARTED/COMPLETEDTASK_EVT_SYSTEM_READY
Mutex'ler
| Mutex | Koruma | Timeout |
|---|---|---|
| UART | RS485 erişimi | 1000ms |
| NVS | Flash storage | 500ms |
| Config | Yapılandırma verisi | — |
Durum Makinesi
BOOT → BOOTSTRAP → CLAIMED → OPERATIONAL
↕
OTA_UPDATE
↕
ERROR
↕
FACTORY_RESET
LED Göstergeleri
| LED | Renk | Durum |
|---|---|---|
| LED 1 | Yeşil | WiFi bağlantısı (sabit=bağlı, yanıp sönen=bağlanıyor) |
| LED 2 | Mavi | MQTT bağlantısı + ownership durumu |
| LED 3 | Kırmızı | Hata / unclaimed |
| LED 4 | Turuncu | OTA güncelleme (yanıp sönen) |
Konfigürasyon Sabitleri
#define TELEMETRY_QUEUE_SIZE 15
#define TELEMETRY_ITEM_MAX_SIZE 1024 // 1KB per JSON
#define COMMAND_QUEUE_SIZE 10
#define NETWORK_TASK_STACK_SIZE (12 * 1024)
#define MODBUS_TASK_STACK_SIZE (6 * 1024)
#define APP_TASK_STACK_SIZE (3 * 1024)
#define WATCHDOG_TIMEOUT_SEC 30
#define WATCHDOG_FEED_INTERVAL_MS 15000
#define MQTT_BROKER_KEEPALIVE 60