Таймеры и 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.
LCD Keypad shield для Arduino
Шилд расширения для Arduino с LCD-дисплеем LCD1602 и набором кнопокСоответсвие занятых выводов ..
162.43грн.
Повышающий преобразователь напряжения 0,9...5В в 5В
Миниатюрный преобразователь напряжения до 5ВВходное напряжение постоянного тока 0,9 ... 5 ВНа выходе..
33.08грн.
Уроки Arduino видимость переменных для начинающих
Переменные в Arduino IDE разделяются на глобальные и локальные. Глобальные переменные дост..
NRF24L01+PA+LNA модуль 2,4 ГГц SMD с разъёмом IPEX, 18×14 мм
NRF24L01+PA+LNA модуль 2,4 ГГц (SMD) с разъёмом IPEX (u.FL), 18×14 мм ..
109.98грн.
Датчик влажности и температуры DHT21
Датчик влажности и температуры DHT21 (AM2301) – точный цифровой сенсор для Arduino и других микрокон..
261.32грн.







