Ana içeriğe geç

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

KuyrukKapasiteItem BoyutuYön
TelemetryQueue151KBModbus → Network
CommandQueue10Network → Modbus
StatusQueue5Modbus → App

Event Group Bayrakları (16 flag)

  • TASK_EVT_WIFI_CONNECTED / DISCONNECTED
  • TASK_EVT_MQTT_CONNECTED / DISCONNECTED
  • TASK_EVT_DEVICE_CLAIMED / UNCLAIMED
  • TASK_EVT_OTA_STARTED / COMPLETED
  • TASK_EVT_SYSTEM_READY

Mutex'ler

MutexKorumaTimeout
UARTRS485 erişimi1000ms
NVSFlash storage500ms
ConfigYapılandırma verisi

Durum Makinesi

BOOT → BOOTSTRAP → CLAIMED → OPERATIONAL

OTA_UPDATE

ERROR

FACTORY_RESET

LED Göstergeleri

LEDRenkDurum
LED 1YeşilWiFi bağlantısı (sabit=bağlı, yanıp sönen=bağlanıyor)
LED 2MaviMQTT bağlantısı + ownership durumu
LED 3KırmızıHata / unclaimed
LED 4TuruncuOTA 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