Таймери та 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.
Стойка роликова для вісі Х 2шт. з кріпленням
Монтажна панель з МДФ для організації вісі Х автоматичного лазерного гравера.Отвори під кроковий дви..
167.68грн.
Автоматичне реверсивне управління двигуном з ATtiny85
Постановка задачі проекту Ставимо задачу автоматично тягати двигуном постійного струму корисну ..
Які види датчиків можна підключити до Arduino для вимірювання параметрів навколишнього середовища
Які види датчиків можна підключити до Arduino для вимірювання параметрів навколишнього середовищ..
lm358dr подвійний операційний підсилювач
LM358DR - двохканальний операційний підсилювач з низьким споживанням, розроблений компанією Texas In..
3.53грн.
Шилд для Arduino Nano и GSM SIM800
Шилд для проектів з використанням плати контролера Arduino Nano та GSM модуля SIM800. Вирішує пробле..
279.68грн.







