6. 2.5 Build : 3 tâches concurrentes avec priorités
// src/main.c — projet fil rouge, étape 1
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
static const char *TAG = "MAIN";
// Tâche 1 — lecture capteur (haute priorité, périodique 500 ms)
static void task_sensor_read(void *pv) {
TickType_t xLastWake = xTaskGetTickCount();
while (1) {
ESP_LOGI("SENSOR", "Reading sensor @ tick %" PRIu32, xTaskGetTickCount());
vTaskDelayUntil(&xLastWake, pdMS_TO_TICKS(500));
}
vTaskDelete(NULL);
}
// Tâche 2 — mise à jour affichage (priorité moyenne)
static void task_display_update(void *pv) {
while (1) {
ESP_LOGI("DISPLAY", "Updating display");
vTaskDelay(pdMS_TO_TICKS(200));
}
vTaskDelete(NULL);
}
// Tâche 3 — envoi réseau (basse priorité)
static void task_network_send(void *pv) {
while (1) {
ESP_LOGI("NETWORK", "Sending data packet");
vTaskDelay(pdMS_TO_TICKS(5000));
}
vTaskDelete(NULL);
}
void app_main(void) {
xTaskCreate(task_sensor_read, "sensor", 4096, NULL, 5, NULL);
xTaskCreate(task_display_update, "display", 4096, NULL, 3, NULL);
xTaskCreate(task_network_send, "network", 4096, NULL, 1, NULL);
ESP_LOGI(TAG, "All tasks created");
}
Exercice : Utiliser eTaskGetState() pour afficher l'état (Running/Ready/Blocked/Suspended) de chaque tâche depuis une 4e tâche de monitoring qui s'exécute toutes les 2 secondes. Soumettez une capture série de 3 cycles d'affichage.