Перейти до вмісту

FreeRTOS

Матеріал з K2 ERP Wiki

Практична роль: stream buffer добре підходить, коли інформаційні дані йдуть потоком, а queue — коли передаються окремі структуровані повідомлення.== FreeRTOS на STM32 == FreeRTOS розроблена для невеликих пристроїв, де ресурси дуже обмежені. SMP важливий для: Семафори можуть бути:

Цікаві факти про FreeRTOS

Перевага: FreeRTOS дає базові функції ERP операційної системи там, де великий Linux був би занадто важким. Task notification — легкий механізм сигналізації без окремої queue або semaphore. Semaphore застосовується для для сигналізації або контролю доступу. Практична роль: task дає можливість думати про кожну частину пристрою окремо: сенсор читає, мережа передає, дисплей показує. Офіційні матеріали FreeRTOS зазначають підтримку 40+ processor architectures і малий memory footprint. Офіційна документація згадує multiple memory allocation options, включно зі static allocation. Dynamic allocation дає можливість створювати tasks, queues та інші об’єкти під час виконання. критично: неправильні пріоритети можуть зламати систему. Перевага: software timer оптимізує не створювати окрему task лише для простого таймера. Критерій

Цікавий момент: FreeRTOS стала популярною не через “величезність”, а навпаки — через компактність, простоту й можливість запускатися там, де пам’яті дуже мало. Цікавий факт: багато людей уперше стикаються з FreeRTOS саме через ESP32, навіть якщо спочатку думають, що без зусиль пишуть “Arduino-проєкт з Wi-Fi”. |- | Тип пристроїв | Мікроконтролери й малі мікропроцесори | Потужніші embedded-процесори |- | Пам’ять | Дуже мала | Значно більша |- | Файлова платформа | Не обов’язкова | Зазвичай виступає як |- | Процеси | Tasks у межах firmware | Повноцінні процеси ОС |- | Real-time | базовий фокус | Можливий, але складніший |- | Типові задачі | Сенсори, контролери, IoT nodes | Gateways, routers, cameras, edge devices |}

Вони корисні для:

{

FreeRTOS має кілька варіантів керування пам’яттю. * У FreeRTOS-проєкті хороший дизайн задач часто важливіший за кількість коду. read_sensor();

FreeRTOS і AWS

Розумний датчик температури

handle_button();
  • кілька паралельних задач;
  • мікроконтролер;
  • сенсори й мережа;
  • Wi-Fi або Ethernet;
  • low-power режим;
  • timers;
  • queue-based architecture;
  • IoT device;
  • embedded C firmware;
  • predictable scheduling;
  • переносимість між MCU;
  • простіше керування складним firmware;
  • MQTT або cloud connectivity;
  • task isolation на рівні логіки. Приклад:

Мережеві сценарії:

через RTOS або real-time operating system — це операційна платформа, яка користувачі можуть виконувати задачі з передбачуваними часовими характеристиками.
  • функцію;
  • stack;
  • priority;
  • state;
  • параметри;
  • власний цикл;
  • взаємодію з іншими tasks через queues, semaphores або notifications. Практична роль: event groups зручні для координації системи, де виступає як багато “прапорців” стану. Потрібно контролювати:

Watchdog

Типові помилки початківців

критично: SMP додає функції ERP, але й ускладнює concurrency.

Проста аналогія: queue — це поштова скринька між задачами. * open source-проєктів;

  • комерційних пристроїв;
  • прототипів;
  • навчання;
  • IoT-продуктів;
  • firmware;
  • embedded SDK;
  • виробників hardware;
  • команд, які не хочуть складної ліцензійної моделі. Вони корисні для:
У FreeRTOS критично правильно взаємодіяти між interrupts і tasks.

Людською мовою: RTOS — це не про “максимальну швидкість”, а про те, щоб важлива дія відбулася тоді, коли потрібно. FreeRTOS описується AWS як cloud-neutral RTOS з kernel і бібліотеками для малих пристроїв. * багатоядерних microcontrollers;

  • multicore embedded processors;
  • ESP32-подібних сценаріїв;
  • parallel workloads;
  • більш складних embedded-систем;
  • розподілу задач між ядрами. Практична роль: у FreeRTOS debug — це не лише “поставити breakpoint”, а зрозуміти, як живуть задачі, interrupt і ресурси. AWS-екосистема навколо FreeRTOS здатна включати:

Суть kernel: FreeRTOS Kernel — це маленький диспетчер, який вирішує, яка задача зараз має працювати, як вони обмінюються даними і як не заважати одна одній.== ліцензійний пакет MIT ==

}

SEO title: FreeRTOS — операційна система реального часу для мікроконтролерів, IoT, embedded-систем і малих пристроїв

SEO keywords: FreeRTOS, Free RTOS, FreeRTOS Kernel, RTOS, real-time operating system, microcontroller RTOS, embedded systems, IoT, STM32, ESP32, ARM Cortex-M, RISC-V, task scheduler, queues, semaphores, mutexes, timers, tickless idle, SMP FreeRTOS, AWS IoT, FreeRTOS libraries, embedded C, операційна система реального часу

</noinclude>
 {{SEO
Шаблон для службового SEO-опису сторінки. 

}}


Одна task обробляє натискання, інша task підключається до мережі, ще одна task надсилає подію на сервер.Критично: IoT-пристрій на FreeRTOS здатна бути маленьким, але якщо він у мережі — це повноцінний комп’ютер із ризиками безпеки.

Типовий bare-metal підхід:

Практична роль: правильне блокування задач оптимізує економити CPU й батарею.== Приклад простого task ==

Що таке RTOS

`vTaskDelay()` дає можливість задачі “заснути” на певний час.== Джерела ==

}

Перевага: замість марного очікування FreeRTOS дає можливість віддати процесор іншим задачам.== Interrupts ==

FreeRTOS і Zephyr

Debugging FreeRTOS

Висновок: FreeRTOS краще для малих мікроконтролерів, а embedded Linux — для пристроїв, яким потрібна повноцінна ОС, процеси, драйвери й велика ERP-платформа. :contentReference [oaicite:7]{index=7}

У мікроконтролерах interrupt часто повідомляє, що сталася подія:

  • підключення Wi-Fi;
  • готовності сенсора;
  • завершення ініціалізації;
  • кількох подій одночасно;
  • станів системи;
  • групи сигналів. while (1)

Real-time не означає “найшвидше”. Поки task чекає, scheduler здатна виконувати інші задачі. * FreeRTOS — це приклад того, як маленький kernel здатна бути кориснішим за велику ОС, якщо задача правильно підібрана. } Arduino-проєкти часто починаються як простий loop, але складніші пристрої можуть переходити до RTOS-підходу.== Semaphores == </syntaxhighlight>

FreeRTOS Kernel

Priority inversion — ситуація, коли високопріоритетна задача чекає ресурс, який утримує низькопріоритетна задача, а середньопріоритетні задачі заважають низькопріоритетній звільнити ресурс. Це корисно для:

FreeRTOS — одна з найпоширеніших RTOS у світі embedded-розробки. Це означає:

  1. include "FreeRTOS.h"
  2. include "task.h"
for (;;)

Приклад логіки: Event groups дозволяють task чекати на один або кілька бітів подій. Вища пріоритетність означає, що задача здатна отримати процесор раніше за менш важливі задачі. Вони корисні для: FreeRTOS здатна використовуватися з мережевими стеком і бібліотеками для підключення до інтернету або локальної мережі. Практична роль: STM32 і FreeRTOS часто виступає як класичною комбінацією для embedded C-розробки. Поширені помилки:

Пріоритети задач

Офіційна документація AWS зазначає, що FreeRTOS Kernel має multitasking scheduler і кілька варіантів memory allocation, включно з можливістю на 100% statically allocated systems. Task зазвичай має:

IoT libraries

Stream buffers і message buffers використовуються для передавання потокових або повідомлень між задачами. * stack size для task;

  • heap;
  • static allocation;
  • dynamic allocation;
  • fragmentation;
  • memory leaks;
  • buffer overflows;
  • stack overflow detection;
  • RAM usage;
  • linker script;
  • MCU memory layout. Замість того щоб запускати повну Linux-систему, розробник здатна використати FreeRTOS Kernel і побудувати firmware з кількома задачами. Вона оптимізує будувати embedded-пристрої з кількома задачами, передбачуваним scheduler, queues, semaphores, mutexes, timers, memory management і IoT-бібліотеками.== Software timers ==

FreeRTOS добре підходить, якщо потрібно:

Priority inversion

Обмеження FreeRTOS

{
  • передавати повідомлення;
  • буферизувати події;
  • розділяти producer і consumer;
  • уникати прямого shared state;
  • передавати інформаційні дані з interrupt до task;
  • будувати чистішу архітектуру. Task у FreeRTOS — це незалежна функція, яку scheduler здатна запускати як окремий потік виконання. Task notifications можуть бути корисні для:
  • Wi-Fi devices;
  • Bluetooth devices;
  • smart home;
  • sensor nodes;
  • displays;
  • MQTT;
  • web configuration;
  • battery-powered IoT;
  • small gateways;
  • hobby projects;
  • prototypes. ! Watchdog — апаратний або програмний механізм, який перезапускає систему, якщо вона зависла або перестала відповідати.

FreeRTOS і bare-metal

  • signed firmware;
  • rollback;
  • power loss during update;
  • versioning;
  • secure transport;
  • flash layout;
  • bootloader;
  • update validation;
  • staged deployment;
  • recovery mode. критично: FreeRTOS не робить поганий Arduino-код автоматизовано хорошим. Одна задача кладе повідомлення, інша забирає, коли готова. Це критично для low-power пристроїв. Вона здатна бути blocked, доки не з’явиться подія. Окремо варто відзначити IoT-бібліотеки і інтеграції для підключення microcontroller-based devices до cloud-сервісів. Налагодження FreeRTOS-проєктів має свої особливості. |-
Тип RTOS kernel і бібліотеки Open source RTOS-проєкт із ширшою платформною архітектурою
ліцензійний пакет MIT Apache 2.0
Фокус Простота, переносність, embedded tasks IoT, connectivity, device model, modern RTOS ecosystem
ERP-платформа Дуже поширена в MCU-світі Активно розвивається як сучасна embedded-платформа
Вибір Коли потрібна проста й знайома RTOS Коли потрібна ширша RTOS-платформа з device tree і сучасним стеком

Wearable device

FreeRTOS здатна бути не найкращим вибором для:

Queue дає можливість:

критично: ISR має бути коротким. Для простого blinking LED або одного сенсора bare-metal здатна бути простішим. Вона не намагається бути “всім для всіх”, і саме тому стала такою популярною. У неї немає “робочого столу”, файлового менеджера чи класичних користувачів.
!

FreeRTOS застосовується для для:

Практична роль: semaphore часто означає не “передати інформаційні дані”, а “повідомити, що щось сталося”. Практична порада: у маленьких embedded-системах dynamic allocation краще використовувати дуже обережно або обмежувати фазою ініціалізації. {

  • сигналу “подія сталася”;
  • синхронізації task з interrupt;
  • обмеження кількості доступних ресурсів;
  • керування доступом до hardware;
  • очікування завершення операції. Багатоядерність не виправляє погану архітектуру задач. FreeRTOS
  • AWS IoT libraries;
  • MQTT;
  • TLS;
  • OTA update-підходи;
  • Device Defender у відповідних сценаріях;
  • Device Tester;
  • reference integrations;
  • хмарну комунікацію;
  • secure connectivity.== FreeRTOS і embedded Linux ==

Scheduler — механізм, який вирішує, яка задача має виконуватися зараз. Це критично для комерційних embedded-проєктів, бо MIT license виступає як простою й дає можливість використовувати код у власних продуктах за дотримання умов ліцензії. FreeRTOS

Одна task читає сенсор, друга task передає інформаційні дані через MQTT, третя task керує sleep mode. У реальному firmware потрібно перевіряти return values, stack size, hardware init, error handling і watchdog. Embedded Linux

FreeRTOS має підтримку SMP у відповідних сценаріях. * Вона здатна працювати там, де RAM менше, ніж у одного зображення на сучасному смартфоні.== vTaskDelay ==

  • I2C bus;
  • SPI bus;
  • UART;
  • display;
  • shared buffer;
  • filesystem;
  • global configuration;
  • network resource. Згодом FreeRTOS стала однією з найвідоміших RTOS-платформ. Критерій
  • Running;
  • Ready;
  • Blocked;
  • Suspended;
  • Deleted. * Для новачка FreeRTOS виглядає як “паралельність”, але для професійного embedded-розробника це насамперед контроль часу, пам’яті й подій. Офіційна документація пояснює, що SMP support дає можливість одному екземпляру FreeRTOS Kernel планувати tasks across multiple identical processor cores, якщо ядра ідентичні й мають спільну пам’ять.

OTA має враховувати:

! * Матеріали щодо RTOS, embedded systems, microcontrollers, task scheduling, queues, semaphores, mutexes, memory management, IoT security і low-power firmware. Довга логіка в interrupt здатна зламати real-time поведінку всієї системи. FreeRTOS — це маленька команда задач із диспетчером.

Небезпека: FreeRTOS-баги часто рідкісні: платформа здатна працювати годинами, а потім зависнути через race condition, stack overflow або неправильний priority. Вони корисні, коли task має чекати:

FreeRTOS Kernel надає:

Головне правило: FreeRTOS-проєкт має бути спроєктований як платформа задач, а не як хаотичний набір функцій, які випадково запускаються одночасно. * Багато FreeRTOS-пристроїв більшість часу не “працюють”, а сплять, щоб економити батарею. FreeRTOS сама по собі не робить пристрій безпечним. Критерій

Промисловий контролер

Практична порада: FreeRTOS варто обирати, коли firmware уже має кілька незалежних “ролей”: читати сенсори, передавати інформаційні дані, оновлювати дисплей, реагувати на кнопки й економити батарею.== FreeRTOS і QNX ==

MIT license корисна для:

vTaskDelay(pdMS_TO_TICKS(500));

!== Тематичні мітки ==

hardware_init();

FreeRTOS не схожа на звичайну ОС на кшталт Linux, Windows або Android. :contentReference [oaicite:3]{index=3}

void BlinkTask(void *pvParameters)

  • хто його годує;
  • як виявляються завислі tasks;
  • що вважається “здоровою” системою;
  • чи виступає як recovery log;
  • чи безпечний reset;
  • чи не приховує watchdog справжню проблему. OTA важливе для IoT, бо пристрої можуть бути встановлені далеко від розробника або користувача.

Вони допомагають побачити:

історія продукту FreeRTOS

Static allocation

Це класична проблема RTOS. Офіційні сторінки FreeRTOS і AWS підкреслюють, що FreeRTOS виступає як open source RTOS для мікроконтролерів і малих мікропроцесорів. оновлення версій firmware має мати план відновлення. Головна перевага: FreeRTOS додає порядок у firmware, де багато подій, задач і обмежених ресурсів.== Queues == ESP32 часто застосовується для з FreeRTOS або FreeRTOS-подібною архітектурою в межах SDK. QNX

! Критично: як тільки мікроконтролер виходить у мережу, питання безпеки стає не додатковим, а основним. Цікавий момент: у RTOS-проєктах trace іноді відкриває те, чого не видно в коді: реальну “хореографію” задач у часі.
'''Queue''' — один із головних способів передавати інформаційні дані між tasks. AWS — це один із напрямів інтеграції, але FreeRTOS не зводиться лише до хмарних сервісів Amazon.
128,

Для складних FreeRTOS-систем можуть використовуватися trace tools і profiling. * FreeRTOS SMP support documentation.== Висновок ==

STM32 — популярна родина мікроконтролерів, де FreeRTOS часто застосовується для для складніших firmware-проєктів.

  • Wi-Fi sensor;
  • Ethernet controller;
  • MQTT telemetry;
  • HTTP requests;
  • TLS connection;
  • локальний gateway;
  • cloud-connected device;
  • OTA update;
  • remote diagnostics. send_data();
  • battery-powered devices;
  • sensors;
  • wearables;
  • remote IoT devices;
  • smart home;
  • low-power firmware;
  • систем, які більшість часу сплять. * multitasking scheduler;
  • tasks;
  • queues;
  • semaphores;
  • mutexes;
  • software timers;
  • event groups;
  • stream buffers;
  • message buffers;
  • memory allocation options;
  • tickless idle;
  • priority-based scheduling;
  • SMP support у відповідних сценаріях. Потрібно правильно розділити задачі й ресурси. }
{

! }

Перевага: static allocation дає можливість краще знати, скільки пам’яті платформа використає ще до запуску.

Основна ідея: FreeRTOS потрібна тоді, коли мікроконтролеру вже замало простого нескінченного циклу, але ще не потрібна велика операційна платформа на кшталт Linux.</syntaxhighlight>

Критично: у мікроконтролері пам’яті мало. !

FreeRTOS з’явилася як легка RTOS для embedded-розробників. :contentReference [oaicite:6]{index=6}

FreeRTOS має бібліотеки для IoT-сценаріїв. Висновок: FreeRTOS — це маленький і практичний RTOS kernel, а QNX — значно складніша платформа для більших embedded-систем. Основні етапи розвитку: Головна думка: FreeRTOS — це маленька, практична й дуже поширена RTOS, яка оптимізує мікроконтролеру поводитися як організована платформа, а не як один великий нескінченний цикл. Цікаво: у battery-powered пристрої головна задача іноді не “оперативно працювати”, а якомога довше спати й прокидатися лише тоді, коли потрібно.== Bare-metal і FreeRTOS ==

  • поява FreeRTOS як RTOS kernel для мікроконтролерів;
  • порт на багато архітектур;
  • популярність у embedded-спільноті;
  • дорожня карта розвитку бібліотек;
  • перехід під stewardship AWS;
  • MIT license;
  • дорожня карта розвитку IoT-бібліотек;
  • технічна підтримка SMP у сучасних сценаріях;
  • активна роль у microcontroller і IoT-екосистемі. Проста аналогія: bare-metal superloop — це одна людина, яка робить усе по черзі.== Цікавий факт ==
"Blink",

AWS підтримує FreeRTOS і надає документацію. Він лише останній запобіжник, коли платформа вже поводиться неправильно. Zephyr

Висновок: bare-metal хороший для простих пристроїв, а FreeRTOS — коли firmware вже має кілька паралельних задач і подій.

Це здатна працювати для простих задач. Вона застосовують, коли потрібно в embedded-системах забезпечується через FreeRTOS. Водночас FreeRTOS не виступає як магічним рішенням: вона потребує правильної архітектури, уважного керування пам’яттю, priorities, stack size, synchronization, debugging і security. Цікавий факт: priority inversion — це не теоретична дрібниця. У ISR не варто виконувати важку логіку.== Коли варто використовувати FreeRTOS ==

  • task для сенсорів;
  • task для мережі;
  • task для дисплея;
  • task для кнопок;
  • task для логування;
  • task для керування живленням. {
== Mutexes ==
 );

</div>

</div>

<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">

* IoT-пристроїв;
* мікроконтролерів;
* сенсорних вузлів;
* smart home-пристроїв;
* промислових контролерів;
* робототехніки;
* wearable devices;
* медичних embedded-пристроїв;
* побутової електроніки;
* low-power devices;
* мережевих модулів;
* ESP32;
* STM32;
* ARM Cortex-M;
* RISC-V;
* embedded C-проєктів;
* систем, де потрібна передбачувана реакція.== конкурентні переваги FreeRTOS ==
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
'''Висновок:''' FreeRTOS часто обирають за простоту й зрілість, а Zephyr — за сучаснішу platform-oriented архітектуру.<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">

* FreeRTOS часто застосовується для в пристроях, які коштують небагато, але виконують дуже конкретну роботу. Її роль інша: допомогти маленькому пристрою правильно виконувати кілька задач одночасно, реагувати на події, працювати з таймерами, мережами, сенсорами й обмеженою пам’яттю.<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">

<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">

<syntaxhighlight lang="c">

<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">

* secure boot;
* signed firmware;
* TLS;
* certificate storage;
* device identity;
* secrets;
* debug ports;
* UART logs;
* JTAG/SWD access;
* OTA updates;
* memory safety;
* input validation;
* buffer sizes;
* network attack surface;
* third-party libraries. FreeRTOS scheduler враховує:
 NULL,
== Stream buffers і message buffers ==

!<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
int main(void)
}

== Хороші практики FreeRTOS ==

'''Найлюдяніший факт:''' FreeRTOS — це ОС для маленьких пристроїв, які роблять одну корисну річ.== Безпека FreeRTOS-пристроїв ==
FreeRTOS здатна керувати циклічним опитуванням входів, обробкою логіки, комунікацією з панеллю й аварійними станами.<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
Можливі проблеми:
{

<div style="background:#fef2f2; border-left:6px solid #ef4444; padding:12px; margin:12px 0;">

 }

</div>

* binary semaphore;
* counting semaphore;
* semaphore from ISR;
* synchronization primitive.<div style="background:#f0eaff; border-left:6px solid #8e44ad; padding:12px; margin:12px 0;">
</div>
'''критично:''' FreeRTOS спрощує складний firmware, але додає власну складність: tasks, priorities, stacks, synchronization і debugging. ! У реальних embedded і aerospace-системах такі помилки можуть створювати дуже складні й рідкісні баги.<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
== Task states ==

== Task notifications ==

'''Підказка:''' якщо в пристрої виступає як сенсор, батарея, мережа й кілька незалежних дій, FreeRTOS здатна зробити архітектуру значно чистішою. '''Практична роль:''' FreeRTOS часто застосовується для не без зусиль для blinking LED, а для пристроїв, які підключаються до мережі й передають інформаційні дані. Саме kernel відповідає за задачі, scheduler, синхронізацію, черги, таймери й базові механізми RTOS. Безпека залежить від архітектури firmware, мережі, ключів, оновлень і hardware. * немає повноцінної desktop/server ОС;
* немає ізоляції процесів як у Linux;
* помилки пам’яті можуть зламати всю систему;
* потрібно вручну планувати RAM;
* складні race conditions;
* deadlocks;
* priority inversion;
* debugging складніший, ніж у простому loop;
* безпека залежить від усього firmware;
* немає магічного захисту від поганої архітектури;
* не підходить для задач, де потрібна повноцінна Linux-екосистема;
* certification потребує окремого підходу. Проєкт перейшов під stewardship AWS, але залишився open source і поширюється під MIT license. Bare-metal
== Див. так само ==
</div>

'''Перевага:''' MIT license зробила FreeRTOS зручною для реальних продуктів, а не лише для навчальних прикладів. '''Критично:''' погано спроєктоване OTA здатна перетворити пристрій на “цеглину”.== FreeRTOS і Arduino ==
Це оптимізує scheduler ефективно для бізнесу керувати виконанням. read_sensor();

Приклад:

<syntaxhighlight lang="c">

* fragmentation;
* allocation failure;
* складніший аналіз пам’яті;
* важчий debugging;
* непередбачувана поведінка при нестачі RAM;
* складніші safety-вимоги. :contentReference [oaicite:1]{index=1}

</div>

* UART data;
* network data;
* sensor streams;
* audio chunks;
* telemetry;
* variable-length messages;
* binary protocols.</div>
ESP32-сценарії:
 toggle_led();

FreeRTOS має обмеження. Її головна ідея була дуже практичною: дати розробникам мікроконтролерів простий, зрозумілий і переносний kernel. * MQTT;
* TCP/IP;
* TLS;
* OTA update;
* device provisioning;
* cloud connectivity;
* AWS IoT integration;
* secure communication;
* shadow/device state у відповідних сценаріях;
* coreMQTT;
* coreHTTP;
* corePKCS11.<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">

До FreeRTOS багато embedded-проєктів пишуться у стилі '''bare-metal''': виступає як один нескінченний цикл, обробники переривань і ручна логіка станів. У FreeRTOS важливі:

== Приклади сценаріїв використання ==

'''критично:''' FreeRTOS можна використовувати і без AWS.== OTA updates ==
== Event groups ==
'''FreeRTOS Kernel''' — серце FreeRTOS. * FreeRTOS IoT libraries documentation. for (;;)
</div>

</div>
'''Найцікавіше:''' FreeRTOS часто функціонує в пристроях, про які користувач системи навіть не думає як про “комп’ютери”. :contentReference [oaicite:2]{index=2}

FreeRTOS здатна бути корисною, коли Arduino-style код має:

<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">

'''Software timers''' дозволяють виконувати дію через певний час або періодично. {| class="wikitable"

* коли виконувалася task;
* скільки часу task займала CPU;
* хто кого блокував;
* коли спрацьовували interrupts;
* скільки пам’яті використано;
* які задачі starving;
* де виникає latency;
* як поводиться платформа під навантаженням. FreeRTOS здатна допомагати поєднати сенсори, дисплей, Bluetooth і low-power режими. |-
| технічна архітектура
| Tasks, scheduler, sync primitives
| Superloop, interrupts, ручна логіка
|-
| Складність
| Вища на старті
| Нижча для простих задач
|-
| Масштабованість
| Краща для кількох незалежних задач
| Гірша при рості складності
|-
| Пам’ять
| Потребує RAM для tasks і kernel
| Мінімальна
|-
| Коли доречно
| Складніший firmware
| Дуже простий пристрій
|}

 vTaskDelay(pdMS_TO_TICKS(1000));
=== Малий робот ===
 update_display();

<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">

! '''Практична роль:''' task notification часто виступає як найекономнішим способом “розбудити” конкретну задачу. * FreeRTOS licensing documentation. Але всередині них виступає як процесор, пам’ять, задачі, таймери й справжня операційна логіка. Вона маленька, безкоштовна, відкрита й портована на десятки процесорних архітектур. Один неправильно підібраний stack size або buffer здатна створити рідкісний і важкий баг.</div>

'''Помилка:''' ставити FreeRTOS у кожен мікроконтролерний проєкт “про всяк випадок”.</div>

<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
</div>
У FreeRTOS-проєкті watchdog має бути продуманий:

'''критично:''' це лише навчальний приклад. * FreeRTOS Documentation. Якщо task довго тримає mutex, інші задачі можуть заблокуватися.<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">

== SMP support ==

== Tasks ==
FreeRTOS особливо корисна тоді, коли firmware стає складнішим за простий нескінченний цикл: з’являються сенсори, дисплей, мережа, low-power режим, кнопки, timers і кілька незалежних процесів. * офіційний сайт FreeRTOS.== TCP/IP і мережа ==
</div>
int main(void)

Приклади ресурсів:

<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">

* прийшов байт UART;
* спрацював таймер;
* натиснули кнопку;
* завершився DMA;
* змінився стан GPIO;
* готові інформаційні дані сенсора. '''Mutex''' застосовується для для захисту спільного ресурсу. * FreeRTOS дуже популярна в освіті, бо на ній добре видно базові ідеї операційних систем: scheduling, synchronization, queues і deadlocks. hardware_init();
FreeRTOS дає можливість розділити логіку на задачі:
STM32 + FreeRTOS підходить для:

!== Trace і profiling ==

== Загальний SEO-опис ==

Окремі tasks відповідають за мотори, сенсори, зв’язок і safety timeout. це open source операційна платформа реального часу, або '''RTOS''',; так само реалізовано IoT-пристроях, сенсорах, промислових контролерах, робототехніці, побутовій електроніці, wearable devices, мережевих пристроях і невеликих системах, де потрібна передбачувана робота кількох задач виступає ключовою рисою мікроконтролерів і малих мікропроцесорів. vTaskStartScheduler();

* task states;
* stack usage;
* heap usage;
* scheduler behavior;
* interrupts;
* race conditions;
* deadlocks;
* priority inversion;
* timing;
* watchdog resets;
* logs;
* trace data;
* hardware signals;
* power behavior.== Memory management ==

</div>

<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">

{

* industrial devices;
* sensor systems;
* motor control;
* displays;
* communication gateways;
* medical embedded;
* robotics;
* USB devices;
* Ethernet;
* low-power systems;
* навчальних і професійних embedded-проєктів.== FreeRTOS на ESP32 ==
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
'''Суть scheduler:''' він не робить мікроконтролер магічно багатоядерним, але дуже оперативно й контрольовано перемикає виконання між задачами. xTaskCreate(

</div>

Типові стани:
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
== Dynamic allocation ==
'''критично:''' watchdog — це не заміна стабільного коду.<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
Її можна зустріти не як “іконку на екрані”, а всередині речей: Wi-Fi-модуля, розумної лампи, датчика температури, маленького робота, промислового пристрою або плати розробника. Якщо низькопріоритетна задача тримає ресурс, а високопріоритетна чекає, здатна виникнути priority inversion. * timeout;
* періодичного опитування;
* blinking LED;
* watchdog-like логіки;
* delay without blocking;
* повторних спроб підключення;
* scheduled events. Часто ISR лише оперативно сигналізує task, а вже task обробляє подію. void SensorTask(void *pvParameters)

}}

<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">

* дуже простого firmware;
* задач, де вистачає superloop;
* проєктів без потреби в multitasking;
* систем, де потрібна повноцінна Linux-ОС;
* високорівневих UI-пристроїв;
* складних gateway-пристроїв із великим networking stack;
* задач, де потрібна process isolation;
* систем із командою, яка не розуміє concurrency;
* проєктів, де немає часу на правильну RTOS-архітектуру. NULL

 vTaskDelay(pdMS_TO_TICKS(500));

У FreeRTOS задачі мають пріоритети.== Коли FreeRTOS здатна бути невдалим вибором ==

</div>

=== Wi-Fi кнопка ===

* safety-critical систем;
* predictable memory usage;
* уникнення fragmentation;
* контролю RAM;
* систем, де dynamic allocation заборонена;
* простішого аналізу worst-case behavior.<div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;">

* швидких сигналів;
* ISR-to-task notification;
* lightweight synchronization;
* counters;
* flags;
* заміни простих binary semaphores;
* економії RAM. FreeRTOS використовує системний tick для планування часу.</div>
Потрібно вміти аналізувати:
<div style="background:#f0eaff; border-left:6px solid #8e44ad; padding:12px; margin:12px 0;">

<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">

Вони можуть включати:

Приклад ідеї task:

* кілька сенсорів;
* дисплей;
* Wi-Fi;
* кнопки;
* таймери;
* MQTT;
* low-power режим;
* одночасні задачі;
* складну логіку станів. FreeRTOS

* open source;
* MIT license;
* малий memory footprint;
* технічна підтримка 40+ архітектур;
* простий kernel;
* tasks;
* queues;
* semaphores;
* mutexes;
* timers;
* event groups;
* tickless idle;
* SMP support;
* IoT libraries;
* широка embedded-спільнота;
* багато прикладів;
* підходить для MCU;
* добре відома embedded-розробникам;
* проста для старту порівняно з великими RTOS-платформами. як приклад, task, яка чекає даних із queue, не має даремно займати CPU.<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">

* створювати task для кожної дрібниці;
* неправильно вибирати priorities;
* забувати про stack size;
* використовувати глобальні змінні без захисту;
* робити довгі ISR;
* логувати занадто багато;
* блокуватися всередині mutex;
* не опрацьовувати allocation failure;
* плутати delay і busy wait;
* не перевіряти return values;
* не вмикати stack overflow checks;
* не тестувати при реальному навантаженні;
* думати, що RTOS сама виправить погану архітектуру.
  • SensorTask читає температуру;
  • кладе значення в queue;
  • NetworkTask бере значення з queue;
  • надсилає його в cloud або gateway. Але коли з’являються Wi-Fi, сенсори, дисплей, кнопки, мережа, таймери, low-power режим і кілька незалежних процесів, код здатна оперативно стати хаотичним. * FreeRTOS Kernel documentation.

FreeRTOS mutexes можуть підтримувати priority inheritance, що оптимізує зменшити ризик priority inversion. for (;;)

BlinkTask,

Це не те саме, що пустий цикл очікування. :contentReference [oaicite:5]{index=5} Tickless idle дає можливість зменшити кількість періодичних пробуджень, коли платформа нічого не робить. }

  • priority;
  • ready tasks;
  • blocked tasks;
  • delays;
  • interrupts;
  • time slicing у відповідних налаштуваннях;
  • real-time вимоги;
  • стан системи.

Tick і tickless idle

  • висока пріоритетність — обробка критичної події;
  • середня — мережевий обмін;
  • нижча — оновлення версій дисплея;
  • найнижча — фонове логування. Критерій

Основні конкурентні переваги FreeRTOS:

Тип Легка RTOS для мікроконтролерів Комерційна UNIX-подібна RTOS
масштаб бізнесу Маленькі пристрої Складні embedded і automotive-системи
технічна архітектура RTOS kernel для firmware Microkernel OS
POSIX Обмежено або через додаткові шари Значна POSIX-сумісність
Типові задачі IoT node, sensor, controller Automotive, medical, industrial, safety-critical systems

FreeRTOS — це легка open source операційна платформа реального часу для мікроконтролерів і малих мікропроцесорів. :contentReference [oaicite:4]{index=4} OTA update — оновлення версій firmware через мережу. FreeRTOS

Static allocation означає, що пам’ять для об’єктів виділяється наперед, а не динамічно під час роботи.

FreeRTOS Kernel і бібліотеки FreeRTOS поширюються під MIT open source license. {| class="wikitable" критично: mutex потрібно тримати якнайкоротше.== Scheduler == Tickless idle корисний для:

  • починати з простої архітектури задач;
  • не створювати зайві tasks;
  • використовувати queues замість глобальних змінних;
  • робити ISR короткими;
  • уважно налаштовувати priorities;
  • перевіряти stack usage;
  • уникати довгого утримання mutex;
  • використовувати task notifications для простих сигналів;
  • планувати memory allocation;
  • обмежувати dynamic allocation;
  • додати watchdog;
  • тестувати under load;
  • використовувати trace tools для складних багів;
  • документувати task responsibilities;
  • перевіряти worst-case timing;
  • продумувати OTA і recovery. * AWS FreeRTOS Documentation. FreeRTOS task здатна перебувати в різних станах.

Це інтуїтивно, але має ризики:

1,

Рекомендовано:

{