Таймеры и FreeRTOS на ESP32
ESP32 работает под управлением FreeRTOS, и в дополнение к аппаратным таймерам (hw_timer_t) в нём доступны программные таймеры FreeRTOS. Они позволяют запускать функции по расписанию, управлять периодическими событиями и при этом экономить аппаратные ресурсы.
Что такое софтварные таймеры FreeRTOS
Программные таймеры FreeRTOS создаются и управляются при помощи специальных функций ядра. В отличие от аппаратных таймеров, они не зависят от железа, а работают в контексте задач ОС. Основные особенности:
- Не используют аппаратные таймерные блоки ESP32 — освобождают ресурсы.
- Могут быть одноразовыми (one-shot) или периодическими (auto-reload).
- Выполняют обработчик (callback) в отдельной служебной задаче FreeRTOS.
Основные функции API
xTimerCreate()— создание таймера.xTimerStart()— запуск таймера.xTimerStop()— остановка таймера.xTimerDelete()— удаление таймера.
Пример: мигание светодиода через FreeRTOS таймер
#include
#define LED_PIN 2
// Дескриптор таймера
TimerHandle_t blinkTimer;
// Обработчик таймера
void blinkCallback(TimerHandle_t xTimer) {
static bool ledState = false;
digitalWrite(LED_PIN, ledState);
ledState = !ledState;
}
void setup() {
pinMode(LED_PIN, OUTPUT);
// Создаем таймер: имя, период 500 мс, auto-reload = true, ID = 0, callback
blinkTimer = xTimerCreate("BlinkTimer", pdMS_TO_TICKS(500), pdTRUE, 0, blinkCallback);
if (blinkTimer != NULL) {
xTimerStart(blinkTimer, 0); // Запускаем таймер
}
}
void loop() {
// Основной цикл пуст — всё делает таймер
}
Что происходит: каждые 500 мс срабатывает callback, и светодиод на GPIO 2 переключает своё состояние.
Сравнение с аппаратными таймерами
| Характеристика | Аппаратные таймеры (hw_timer_t) | Программные таймеры FreeRTOS |
|---|---|---|
| Зависимость от железа | Работают напрямую с блоками таймеров ESP32 | Выполняются в задачах ОС |
| Точность | Высокая, до микросекунд | Миллисекундный диапазон, зависит от системного тика |
| Скорость выполнения | ISR — работает очень быстро | Задержка на планирование задач |
| Нагрузка на CPU | Минимальная | Чуть выше, чем у hw_timer |
| Удобство | Требуется писать обработчик ISR | Callback в обычном коде, проще отлаживать |
Когда использовать софтварные таймеры
- Когда точность в микросекундах не критична.
- Для управления событиями в миллисекундном диапазоне (мигание, обновление интерфейса, периодические задачи).
- Когда аппаратные таймеры уже заняты.
Заключение
Таймеры FreeRTOS на ESP32 — удобный инструмент для периодических задач. Если вам нужна высокая точность, используйте аппаратные hw_timer_t. Если же важна простота и гибкость — подойдут программные таймеры FreeRTOS.
Какие виды датчиков можно подключить к Arduino для измерения параметров окружающей среды
Какие виды датчиков можно подключить к Arduino для измерения параметров окружающей среды Ar..
Подключение кнопки к Arduino
Изначально собирался написать статью о фильтрации дребезга кнопки, подключенной к контроллеру Arduin..
Датчик напряжения сети 220В
Гальванически изолированный датчик наличия напряжения в сети 220ВНапряжение питания логики 3 ... 5 В..
106.67грн.
SIM800L GSM модуль
SIM800L GSM модуль SIM800L — компактный GSM/GPRS модуль, построенный на специализированной микрос..
224.19грн.
Набор перемычек (мама-папа) 40шт 20см
Набор соединительных проводов для соединения плат контроллера с периферией без пайки. Подходят под с..
88.83грн.







