2.5 Build : 3 tâches concurrentes avec priorités

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.

Se connecter pour suivre votre progression.