Таймеры и 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.
Держатель для батареек 3хAA
Бокс для трёх пальчиковых батареек типа ААОбщее напряжение на проводах бокса получится 4,5 В..
31.00грн.
Светодиодная матрица 8х8 с управляющим контроллером MAX7219
Готовый блок светодиодной матрицы 8х8 с поддержкой каскадного включения нескольких идентичных модуле..
87.37грн.
Радиатор 25х23х16мм
Радиатор алюминиевый для транзисторов, симисторов ... с установкой на печатную платуОкрашенный в чер..
17.24грн.
Модуль стабилизатора напряжения 3,3 В
Модуль предназначен для питания различных электронных устройств, модулей, работающих на напряжении 3..
18.61грн.
Разработка печатных плат под заказ — профессиональное проектирование PCB для бизнеса
Разработка печатных плат под заказ — профессиональное проектирование PCB для бизнеса Разработка..







