3. 4.2 Software timers — actions périodiques sans tâche dédiée
Un software timer exécute une callback dans le contexte du timer daemon task (priorité configurable). Pas de pile dédiée, pas de tâche dans vTaskList.
#include "freertos/timers.h"
#define LED_PIN GPIO_NUM_2
static void heartbeat_callback(TimerHandle_t xTimer)
{
static uint8_t led_state = 0;
gpio_set_level(LED_PIN, led_state ^= 1);
}
void init_timers(void)
{
TimerHandle_t xHeartbeatTimer = xTimerCreate(
"heartbeat", // nom (debug)
pdMS_TO_TICKS(500), // période
pdTRUE, // auto-reload (répétitif)
NULL, // timer ID (NULL si inutile)
heartbeat_callback
);
if (xHeartbeatTimer != NULL) {
xTimerStart(xHeartbeatTimer, 0);
}
}
Contrainte critique : ne jamais bloquer dans une callback timer :
- Pas de vTaskDelay
- Pas de xQueueReceive avec timeout > 0
- Pas de xSemaphoreTake avec timeout > 0
Si une opération longue est nécessaire, envoyer un signal à une tâche dédiée depuis la callback.