Таймеры и 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 18мм + 6мм
Стойка для крепления различных електронных модулей к корпусу устройстваВысота стойки 18 ммДлина внеш..
5.18грн.
ST-Link V2 программатор
Программатор для микроконтроллеровАлюминиевый корпусПоддерживает следующие версии программ для проек..
153.83грн.
Модуль блока питания 5В 700мА
Миниатюрный безкорпусный трансформаторный блок питания для любительских проектов.Входное напряжение ..
70.15грн.
Датчик температуры аналоговый 10К
Датчик температуры аналоговый NTC 10K Аналоговый датчик температуры NTC 10K ±1% — это высокоточный ..
44.68грн.
AT24C02 EEPROM I2C
Микросхема постоянной памяти EEPROMНапряжение питания 2,7 ... 5,5 ВОбъем 256 БайтКомуникация I2..
4.54грн.







