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

FreeRTOS

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

Загальний характеристика

FreeRTOS Kernel — серце FreeRTOS.;

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

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

!; Критерій

vTaskDelay(pdMS_TO_TICKS(1000));
}

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

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

FreeRTOS сама по собі не робить пристрій безпечним.; Потрібно правильно розділити задачі й ресурси.; Критерій

}
  • підключення Wi-Fi;
  • готовності сенсора;
  • завершення ініціалізації;
  • кількох подій одночасно;
  • станів системи;
  • групи сигналів.; Саме kernel відповідає за задачі, scheduler, синхронізацію, черги, таймери й базові механізми RTOS.;== TCP/IP і мережа ==

FreeRTOS має підтримку SMP у відповідних сценаріях.; for (;;)

Scheduler — механізм, який вирішує, яка задача має виконуватися зараз.; !; Але всередині них є собою процесор, пам’ять, задачі, таймери й справжня операційна логіка.; {

FreeRTOS mutexes можуть підтримувати priority inheritance, що сприяє зменшити ризик priority inversion.;
  • industrial devices;
  • sensor systems;
  • motor control;
  • displays;
  • communication gateways;
  • medical embedded;
  • robotics;
  • USB devices;
  • Ethernet;
  • low-power systems;
  • навчальних і професійних embedded-проєктів.; Практична роль: правильне блокування задач сприяє економити CPU й батарею.; Водночас FreeRTOS не є собою магічним рішенням: вона потребує правильної архітектури, уважного керування пам’яттю, priorities, stack size, synchronization, debugging і security.;

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

ESP32-сценарії:

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

Висновок: bare-metal хороший для простих пристроїв, а FreeRTOS — коли firmware вже має кілька паралельних задач і подій.; Довга логіка в interrupt має змогу зламати real-time поведінку всієї системи.; * signed firmware;

  • rollback;
  • power loss during update;
  • versioning;
  • secure transport;
  • flash layout;
  • bootloader;
  • update validation;
  • staged deployment;
  • recovery mode.; void BlinkTask(void *pvParameters)
  • поява FreeRTOS як RTOS kernel для мікроконтролерів;
  • порт на багато архітектур;
  • популярність у embedded-спільноті;
  • еволюція бібліотек;
  • перехід під stewardship AWS;
  • MIT license;
  • еволюція IoT-бібліотек;
  • супровід SMP у сучасних сценаріях;
  • активна роль у microcontroller і IoT-екосистемі.; Watchdog — апаратний або програмний механізм, який перезапускає систему, якщо вона зависла або перестала відповідати.; Практична роль: FreeRTOS часто застосовується не без ускладнень для blinking LED, а для пристроїв, які підключаються до мережі й передають інформаційні дані.; це open source операційна платформа реального часу, або RTOS,; додатково реалізовано IoT-пристроях, сенсорах, промислових контролерах, робототехніці, побутовій електроніці, wearable devices, мережевих пристроях і невеликих системах, де потрібна передбачувана робота кількох задач виступає ключовою рисою мікроконтролерів і малих мікропроцесорів.; Але коли з’являються Wi-Fi, сенсори, дисплей, кнопки, мережа, таймери, low-power режим і кілька незалежних процесів, код має змогу оперативно стати хаотичним.; Суть scheduler: він не робить мікроконтролер магічно багатоядерним, але дуже оперативно й контрольовано перемикає виконання між задачами.; }
while (1)

Task notification — легкий механізм сигналізації без окремої queue або semaphore.; Для складних FreeRTOS-систем можуть використовуватися trace tools і profiling.; Основні етапи розвитку:

Найлюдяніший факт: FreeRTOS — це ОС для маленьких пристроїв, які роблять одну корисну річ.;

FreeRTOS має змогу керувати циклічним опитуванням входів, обробкою логіки, комунікацією з панеллю й аварійними станами.; * FreeRTOS IoT libraries documentation.;== Обмеження FreeRTOS == Небезпека: FreeRTOS-баги часто рідкісні: платформа має змогу працювати годинами, а потім зависнути через race condition, stack overflow або неправильний priority.; Потрібно вміти аналізувати: }

Task notifications можуть бути корисні для:

У FreeRTOS істотно правильно взаємодіяти між interrupts і tasks.; {| class="wikitable" Це комфортно, але має ризики:

IoT libraries

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

</div>

Arduino-проєкти часто починаються як простий loop, але складніші пристрої можуть переходити до RTOS-підходу.; '''Основна ідея:''' FreeRTOS потрібна тоді, коли мікроконтролеру вже замало простого нескінченного циклу, але ще не потрібна велика операційна платформа на кшталт Linux.; У ISR не варто виконувати важку логіку.; * коли виконувалася task;
* скільки часу task займала CPU;
* хто кого блокував;
* коли спрацьовували interrupts;
* скільки памяті використано;
* які задачі starving;
* де виникає latency;
* як поводиться платформа під навантаженням.; !; FreeRTOS

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

</div>

* task для сенсорів;
* task для мережі;
* task для дисплея;
* task для кнопок;
* task для логування;
* task для керування живленням.;== Tick і tickless idle ==

</div>

== FreeRTOS і bare-metal ==

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

'''Практична роль:''' task надає можливість думати про кожну частину пристрою окремо: сенсор читає, мережа передає, дисплей показує.; Замість того щоб запускати повну Linux-систему, розробник має змогу використати FreeRTOS Kernel і побудувати firmware з кількома задачами.; update_display();
'''Підказка:''' якщо в пристрої є собою сенсор, батарея, мережа й кілька незалежних дій, FreeRTOS має змогу зробити архітектуру значно чистішою.; * прийшов байт UART;
* спрацював таймер;
* натиснули кнопку;
* завершився DMA;
* змінився стан GPIO;
* готові інформаційні дані сенсора.; :contentReference [oaicite:6]{index=6}
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
</div>
</div>
'''Критично:''' IoT-пристрій на FreeRTOS має змогу бути маленьким, але якщо він у мережі  це повноцінний компютер із ризиками безпеки.; '''Цікавий факт:''' багато людей уперше стикаються з FreeRTOS саме через ESP32, навіть якщо спочатку думають, що без ускладнень пишуть Arduino-проєкт з Wi-Fi.;== FreeRTOS і QNX ==

'''істотно:''' mutex потрібно тримати якнайкоротше.;<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
 hardware_init();

 {

== Memory management ==

У FreeRTOS задачі мають пріоритети.; Офіційна документація пояснює, що SMP support надає можливість одному екземпляру FreeRTOS Kernel планувати tasks across multiple identical processor cores, якщо ядра ідентичні й мають спільну память.;</div>
FreeRTOS task має змогу перебувати в різних станах.;== FreeRTOS і AWS ==
</div>
'''Stream buffers''' і '''message buffers''' використовуються для передавання потокових або повідомлень між задачами.;== переважні аспекти FreeRTOS ==
'''Висновок:''' FreeRTOS краще для малих мікроконтролерів, а embedded Linux  для пристроїв, яким потрібна повноцінна ОС, процеси, драйвери й велика програмний пакет.; * AWS FreeRTOS Documentation.; AWS  це один із напрямів інтеграції, але FreeRTOS не зводиться лише до хмарних сервісів Amazon.; "Blink",

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

</div>

* multitasking scheduler;
* tasks;
* queues;
* semaphores;
* mutexes;
* software timers;
* event groups;
* stream buffers;
* message buffers;
* memory allocation options;
* tickless idle;
* priority-based scheduling;
* SMP support у відповідних сценаріях.; vTaskDelay(pdMS_TO_TICKS(500));

</div>
<syntaxhighlight lang="c">
'''істотно:''' неправильні пріоритети можуть зламати систему.;== Priority inversion ==
</div>
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">

</div>

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

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

!;== FreeRTOS і Zephyr ==

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

* IoT-пристроїв;
* мікроконтролерів;
* сенсорних вузлів;
* smart home-пристроїв;
* промислових контролерів;
* робототехніки;
* wearable devices;
* медичних embedded-пристроїв;
* побутової електроніки;
* low-power devices;
* мережевих модулів;
* ESP32;
* STM32;
* ARM Cortex-M;
* RISC-V;
* embedded C-проєктів;
* систем, де потрібна передбачувана реакція.; Вона маленька, безкоштовна, відкрита й портована на десятки процесорних архітектур.; * Матеріали щодо RTOS, embedded systems, microcontrollers, task scheduling, queues, semaphores, mutexes, memory management, IoT security і low-power firmware.; FreeRTOS розроблена для невеликих пристроїв, де ресурси дуже обмежені.; '''Практична порада:''' FreeRTOS варто обирати, коли firmware уже має кілька незалежних ролей: читати сенсори, передавати інформаційні дані, оновлювати дисплей, реагувати на кнопки й економити батарею.; Це сприяє scheduler результативно керувати виконанням.; * stack size для task;
* heap;
* static allocation;
* dynamic allocation;
* fragmentation;
* memory leaks;
* buffer overflows;
* stack overflow detection;
* RAM usage;
* linker script;
* MCU memory layout.; :contentReference [oaicite:5]{index=5}
'''Static allocation''' означає, що память для обєктів виділяється наперед, а не динамічно під час роботи.; :contentReference [oaicite:7]{index=7}

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

== Watchdog ==

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

</div>

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

void SensorTask(void *pvParameters)

!; Проєкт перейшов під stewardship AWS, але залишився open source і поширюється під MIT license.;

Tickless idle корисний для:

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

Stream buffers і message buffers

Event groups дозволяють task чекати на один або кілька бітів подій.;

Software timers дозволяють виконувати дію через певний час або періодично.; істотно: FreeRTOS можна використовувати і без AWS.; Її головна ідея була дуже практичною: дати розробникам мікроконтролерів простий, зрозумілий і переносний kernel.; У реальному firmware потрібно перевіряти return values, stack size, hardware init, error handling і watchdog.; Якщо низькопріоритетна задача тримає ресурс, а високопріоритетна чекає, має змогу виникнути priority inversion.; Це має змогу працювати для простих задач.; * FreeRTOS licensing documentation.; FreeRTOS особливо корисна тоді, коли firmware стає складнішим за простий нескінченний цикл: з’являються сенсори, дисплей, мережа, low-power режим, кнопки, timers і кілька незалежних процесів.; Цікавий факт: priority inversion — це не теоретична дрібниця.; Поширені помилки: FreeRTOS scheduler враховує:

Головна перевага: FreeRTOS додає порядок у firmware, де багато подій, задач і обмежених ресурсів.;
  • задача має виконатися вчасно;
  • scheduler має передбачувано перемикати задачі;
  • важливі події не повинні губитися;
  • пріоритети задач мають значення;
  • затримки потрібно контролювати;
  • платформа має реагувати на події з сенсорів, таймерів або переривань.; * У FreeRTOS-проєкті хороший дизайн задач часто важливіший за кількість коду.; Типовий bare-metal підхід:

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

  • UART data;
  • network data;
  • sensor streams;
  • audio chunks;
  • telemetry;
  • variable-length messages;
  • binary protocols.;== Mutexes ==

Проста аналогія: queue — це поштова скринька між задачами.; Багатоядерність не виправляє погану архітектуру задач.; Одна задача кладе повідомлення, інша забирає, коли готова.;== FreeRTOS і embedded Linux ==

OTA важливе для IoT, бо пристрої можуть бути встановлені далеко від розробника або користувача.;

Приклад логіки:

FreeRTOS і Arduino

AWS підтримує роботу FreeRTOS і надає документацію, IoT-бібліотеки та інтеграції для підключення microcontroller-based devices до cloud-сервісів.; }}

}

  • функцію;
  • stack;
  • priority;
  • state;
  • параметри;
  • власний цикл;
  • взаємодію з іншими tasks через queues, semaphores або notifications.; Практична роль: event groups зручні для координації системи, де є собою багато “прапорців” стану.; * Багато FreeRTOS-пристроїв більшість часу не “працюють”, а сплять, щоб економити батарею.;== Dynamic allocation ==
  • I2C bus;
  • SPI bus;
  • UART;
  • display;
  • shared buffer;
  • filesystem;
  • global configuration;
  • network resource.; read_sensor();

Scheduler

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

FreeRTOS з’явилася як легка RTOS для embedded-розробників.; FreeRTOS

  • сигналу “подія сталася”;
  • синхронізації task з interrupt;
  • обмеження кількості доступних ресурсів;
  • керування доступом до hardware;
  • очікування завершення операції.; * створювати task для кожної дрібниці;
  • неправильно вибирати priorities;
  • забувати про stack size;
  • використовувати глобальні змінні без захисту;
  • робити довгі ISR;
  • логувати занадто багато;
  • блокуватися всередині mutex;
  • не обробляти allocation failure;
  • плутати delay і busy wait;
  • не перевіряти return values;
  • не вмикати stack overflow checks;
  • не тестувати при реальному навантаженні;
  • думати, що RTOS сама виправить погану архітектуру.;== Див.; додатково ==

{

Малий робот

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

|- | Тип | RTOS kernel і бібліотеки | Open source RTOS-проєкт із ширшою платформною архітектурою |- | ліцензійний пакет | MIT | Apache 2.0 |- | Фокус | Простота, переносність, embedded tasks | IoT, connectivity, device model, modern RTOS ecosystem |- | програмний пакет | Дуже поширена в MCU-світі | Активно розвивається як сучасна embedded-платформа |- | Вибір | Коли потрібна проста й знайома RTOS | Коли потрібна ширша RTOS-платформа з device tree і сучасним стеком |}

Перевага: замість марного очікування FreeRTOS надає можливість віддати процесор іншим задачам.; Офіційні матеріали FreeRTOS зазначають підтримку 40+ processor architectures і малий memory footprint.; FreeRTOS — це маленька команда задач із диспетчером.; Embedded Linux

  • battery-powered devices;
  • sensors;
  • wearables;
  • remote IoT devices;
  • smart home;
  • low-power firmware;
  • систем, які більшість часу сплять.; * Для новачка FreeRTOS виглядає як “паралельність”, але для професійного embedded-розробника це насамперед контроль часу, пам’яті й подій.;
{
Dynamic allocation надає можливість створювати tasks, queues та інші об’єкти під час виконання.;

</syntaxhighlight>

Debugging FreeRTOS

Tasks

  • швидких сигналів;
  • ISR-to-task notification;
  • lightweight synchronization;
  • counters;
  • flags;
  • заміни простих binary semaphores;
  • економії RAM.; як ілюстрація, task, яка чекає даних із queue, не має даремно займати CPU.; {

FreeRTOS — одна з найпоширеніших RTOS у світі embedded-розробки.; for (;;)

Джерела

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

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

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

Що таке RTOS

FreeRTOS має змогу допомагати поєднати сенсори, дисплей, Bluetooth і low-power режими.; Вища пріоритетність означає, що задача має змогу отримати процесор раніше за менш важливі задачі.; FreeRTOS Kernel і бібліотеки FreeRTOS поширюються під MIT open source license.; {| class="wikitable"

Її можна зустріти не як “іконку на екрані”, а всередині речей: Wi-Fi-модуля, розумної лампи, датчика температури, маленького робота, промислового пристрою або плати розробника.;== Висновок ==

Окремі tasks відповідають за мотори, сенсори, зв’язок і safety timeout.;

Вони корисні, коли task має чекати:

FreeRTOS має обмеження.;
істотно: watchdog — це не заміна стабільного коду.;
Висновок: FreeRTOS часто обирають за простоту й зрілість, а Zephyr — за сучаснішу platform-oriented архітектуру.; !; У неї немає “робочого столу”, файлового менеджера чи класичних користувачів.; FreeRTOS описується AWS як cloud-neutral RTOS з kernel і бібліотеками для малих пристроїв.; Офіційна документація згадує multiple memory allocation options, включно зі static allocation.;
);

{

Людською мовою: RTOS — це не про “максимальну швидкість”, а про те, щоб важлива дія відбулася тоді, коли потрібно.; Вона має змогу бути blocked, доки не з’явиться подія.; :contentReference [oaicite:1]{index=1} FreeRTOS використовує системний tick для планування часу.; :contentReference [oaicite:4]{index=4}

Task notifications

toggle_led();

Real-time не означає “найшвидше”.; * Вона має змогу працювати там, де RAM менше, ніж у одного зображення на сучасному смартфоні.;</syntaxhighlight> Mutex застосовується для захисту спільного ресурсу.; Вони корисні для:

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

Приклад:

Цікавий момент: FreeRTOS стала популярною не через “величезність”, а навпаки — через компактність, простоту й можливість запускатися там, де пам’яті дуже мало.; AWS-екосистема навколо FreeRTOS має змогу включати: Налагодження FreeRTOS-проєктів має свої особливості.; QNX

  • FreeRTOS часто застосовується в пристроях, які коштують небагато, але виконують дуже конкретну роботу.;== Static allocation ==
NULL

Software timers

Semaphore застосовується для сигналізації або контролю доступу.; vTaskDelay(pdMS_TO_TICKS(500)); OTA має враховувати:

!; FreeRTOS має бібліотеки для IoT-сценаріїв.; * MQTT;

  • TCP/IP;
  • TLS;
  • OTA update;
  • device provisioning;
  • cloud connectivity;
  • AWS IoT integration;
  • secure communication;
  • shadow/device state у відповідних сценаріях;
  • coreMQTT;
  • coreHTTP;
  • corePKCS11.;

Перевага: FreeRTOS дає базові функціональні можливості операційної системи там, де великий Linux був би занадто важким.; * FreeRTOS дуже популярна в освіті, бо на ній добре видно базові ідеї операційних систем: scheduling, synchronization, queues і deadlocks.; Task зазвичай має:

Коли варто використовувати FreeRTOS

Queue — один із головних способів передавати інформаційні дані між tasks.; Критично: у мікроконтролері пам’яті мало.;== FreeRTOS на ESP32 == істотно: ISR має бути коротким.; Поки task чекає, scheduler має змогу виконувати інші задачі.; FreeRTOS Kernel надає:

  • 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

|- | технічна архітектура | Tasks, scheduler, sync primitives | Superloop, interrupts, ручна логіка |- | Складність | Вища на старті | Нижча для простих задач |- | Масштабованість | Краща для кількох незалежних задач | Гірша при рості складності |- | Пам’ять | Потребує RAM для tasks і kernel | Мінімальна |- | Коли доречно | Складніший firmware | Дуже простий пристрій |}

int main(void) Перевага: software timer сприяє не створювати окрему task лише для простого таймера.; істотно: FreeRTOS не робить поганий Arduino-код автономно хорошим.;== Тематичні мітки == {

<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
FreeRTOS надає можливість розділити логіку на задачі:
</div>
=== Wearable device ===
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
Одна task читає сенсор, друга task передає інформаційні дані через MQTT, третя task керує sleep mode.;<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
'''Практична роль:''' task notification часто є собою найекономнішим способом розбудити конкретну задачу.;<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
|-
| Тип пристроїв
| Мікроконтролери й малі мікропроцесори
| Потужніші embedded-процесори
|-
| Память
| Дуже мала
| Значно більша
|-
| Файлова платформа
| Не обовязкова
| Зазвичай є собою
|-
| Процеси
| Tasks у межах firmware
| Повноцінні процеси ОС
|-
| Real-time
| ключовий фокус
| Можливий, але складніший
|-
| Типові задачі
| Сенсори, контролери, IoT nodes
| Gateways, routers, cameras, edge devices
|}

Вони можуть включати:
'''Проста аналогія:''' bare-metal superloop  це одна людина, яка робить усе по черзі.; Він лише останній запобіжник, коли платформа вже поводиться неправильно.; '''Priority inversion'''  ситуація, коли високопріоритетна задача чекає ресурс, який утримує низькопріоритетна задача, а середньопріоритетні задачі заважають низькопріоритетній звільнити ресурс.; ESP32 часто застосовується з FreeRTOS або FreeRTOS-подібною архітектурою в межах SDK.; Часто ISR лише оперативно сигналізує task, а вже task обробляє подію.; '''Головне правило:''' FreeRTOS-проєкт має бути спроєктований як платформа задач, а не як хаотичний набір функцій, які випадково запускаються одночасно.; Критерій
У FreeRTOS-проєкті watchdog має бути продуманий:
'''Практична порада:''' у маленьких embedded-системах dynamic allocation краще використовувати дуже обережно або обмежувати фазою ініціалізації.; '''Tickless idle''' надає можливість зменшити кількість періодичних пробуджень, коли платформа нічого не робить.; {
FreeRTOS має кілька варіантів керування памяттю.;<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">

 }

* офіційно затверджений сайт FreeRTOS.;</div>

<div style="background:#f0eaff; border-left:6px solid #8e44ad; padding:12px; margin:12px 0;">
'''Цікаво:''' у battery-powered пристрої головна задача іноді не оперативно працювати, а якомога довше спати й прокидатися лише тоді, коли потрібно.; * FreeRTOS Kernel documentation.; У FreeRTOS важливі:
'''Практична роль:''' STM32 і FreeRTOS часто є собою класичною комбінацією для embedded C-розробки.;</div>
 }
 1,

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

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

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

* binary semaphore;
* counting semaphore;
* semaphore from ISR;
* synchronization primitive.; read_sensor();

 send_data();

'''Критично:''' погано спроєктоване OTA має змогу перетворити пристрій на цеглину.;== SMP support ==

<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
!; '''Критично:''' як тільки мікроконтролер виходить у мережу, питання безпеки стає не додатковим, а основним.; Офіційні сторінки FreeRTOS і AWS підкреслюють, що FreeRTOS є собою open source RTOS для мікроконтролерів і малих мікропроцесорів.; * немає повноцінної desktop/server ОС;
* немає ізоляції процесів як у Linux;
* помилки памяті можуть зламати всю систему;
* потрібно вручну планувати RAM;
* складні race conditions;
* deadlocks;
* priority inversion;
* debugging складніший, ніж у простому loop;
* безпека залежить від усього firmware;
* немає магічного захисту від поганої архітектури;
* не підходить для задач, де потрібна повноцінна Linux-екосистема;
* certification потребує окремого підходу.;== vTaskDelay ==

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

 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.;</div>

'''Головна думка:''' FreeRTOS  це маленька, практична й дуже поширена RTOS, яка сприяє мікроконтролеру поводитися як організована платформа, а не як один великий нескінченний цикл.; * FreeRTOS  це приклад того, як маленький kernel має змогу бути кориснішим за велику ОС, якщо задача правильно підібрана.; FreeRTOS

'''Найцікавіше:''' FreeRTOS часто функціонує в пристроях, про які користувач системи навіть не думає як про компютери.; Для простого blinking LED або одного сенсора bare-metal має змогу бути простішим.; Bare-metal
!; * Wi-Fi sensor;
* Ethernet controller;
* MQTT telemetry;
* HTTP requests;
* TLS connection;
* локальний gateway;
* cloud-connected device;
* OTA update;
* remote diagnostics.;</div>
Рекомендовано:
<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">

</div>

 xTaskCreate(

{| class="wikitable"

* Running;
* Ready;
* Blocked;
* Suspended;
* Deleted.; У реальних embedded і aerospace-системах такі помилки можуть створювати дуже складні й рідкісні баги.; FreeRTOS добре підходить, якщо потрібно:

== Queues ==

== OTA updates ==

</div>

* Wi-Fi devices;
* Bluetooth devices;
* smart home;
* sensor nodes;
* displays;
* MQTT;
* web configuration;
* battery-powered IoT;
* small gateways;
* hobby projects;
* prototypes.; int main(void)

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

* timeout;
* періодичного опитування;
* blinking LED;
* watchdog-like логіки;
* delay without blocking;
* повторних спроб підключення;
* scheduled events.; Якщо task довго тримає mutex, інші задачі можуть заблокуватися.; Один неправильно підібраний stack size або buffer має змогу створити рідкісний і важкий баг.;<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
Згодом FreeRTOS стала однією з найвідоміших RTOS-платформ.; актуалізація firmware має мати план відновлення.;== Хороші практики FreeRTOS ==
</div>
!; !; Мережеві сценарії:

 handle_button();

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

== Semaphores ==
SMP важливий для:
'''Перевага:''' MIT license зробила FreeRTOS зручною для реальних продуктів, а не лише для навчальних прикладів.; Одна task обробляє натискання, інша task підключається до мережі, ще одна task надсилає подію на сервер.; '''Цікавий момент:''' у RTOS-проєктах trace іноді відкриває те, чого не видно в коді: реальну хореографію задач у часі.; * AWS IoT libraries;
* MQTT;
* TLS;
* OTA update-підходи;
* Device Defender у відповідних сценаріях;
* Device Tester;
* reference integrations;
* хмарну комунікацію;
* secure connectivity.; Її роль інша: допомогти маленькому пристрою правильно виконувати кілька задач одночасно, реагувати на події, працювати з таймерами, мережами, сенсорами й обмеженою памяттю.;== Trace і profiling ==
Потрібно контролювати:
<div style="background:#f0eaff; border-left:6px solid #8e44ad; padding:12px; margin:12px 0;">

== Коли FreeRTOS має змогу бути невдалим вибором ==

'''Практична роль:''' у FreeRTOS debug  це не лише поставити breakpoint, а зрозуміти, як живуть задачі, interrupt і ресурси.; * SensorTask читає температуру;
* кладе значення в queue;
* NetworkTask бере значення з queue;
* надсилає його в cloud або gateway.; Безпека залежить від архітектури firmware, мережі, ключів, оновлень і hardware.;</div>
</div>
завдяки наявності '''RTOS''' або '''real-time operating system'''  це операційна платформа, яка користувачі можуть виконувати задачі з передбачуваними часовими характеристиками.;<div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;">
Типові стани:
 for (;;)

 NULL,

</div>

'''Практична роль:''' semaphore часто означає не передати інформаційні дані, а повідомити, що щось сталося.; STM32  популярна родина мікроконтролерів, де FreeRTOS часто застосовується для складніших firmware-проєктів.;<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">

'''істотно:''' це лише навчальний приклад.;== FreeRTOS Kernel ==

</div>

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

STM32 + FreeRTOS підходить для:

'''OTA update'''  актуалізація firmware через мережу.; Вона не намагається бути всім для всіх, і саме з цієї причини стала такою популярною.; :contentReference [oaicite:3]{index=3}
Це корисно для:

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

'''істотно:''' SMP додає функціональні можливості, але й ускладнює concurrency.; Приклади ресурсів:
FreeRTOS має змогу бути не найкращим вибором для:

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

FreeRTOS не схожа на звичайну ОС на кшталт Linux, Windows або Android.; '''Висновок:''' FreeRTOS  це маленький і практичний RTOS kernel, а QNX  значно складніша платформа для більших embedded-систем.; Критерій

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

== ліцензійний пакет MIT ==
!;== Цікавий факт ==

<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
== Безпека FreeRTOS-пристроїв ==
</div>

'''Перевага:''' static allocation надає можливість краще знати, скільки памяті платформа використає ще до запуску.; * передавати повідомлення;
* буферизувати події;
* розділяти producer і consumer;
* уникати прямого shared state;
* передавати інформаційні дані з interrupt до task;
* будувати чистішу архітектуру.; Це не те саме, що пустий цикл очікування.;<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
== Event groups ==
`vTaskDelay()` надає можливість задачі заснути на певний час.; 128,
'''Суть kernel:''' FreeRTOS Kernel  це маленький диспетчер, який вирішує, яка задача зараз має працювати, як вони обмінюються даними і як не заважати одна одній.; }
  • починати з простої архітектури задач;
  • не створювати зайві 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.; * FreeRTOS Documentation.;== Приклад простого task ==

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

<syntaxhighlight lang="c">

BlinkTask,
  • кілька паралельних задач;
  • мікроконтролер;
  • сенсори й мережа;
  • Wi-Fi або Ethernet;
  • low-power режим;
  • timers;
  • queue-based architecture;
  • IoT device;
  • embedded C firmware;
  • predictable scheduling;
  • переносимість між MCU;
  • простіше керування складним firmware;
  • MQTT або cloud connectivity;
  • task isolation на рівні логіки.; У мікроконтролерах interrupt часто повідомляє, що сталася подія:
істотно: FreeRTOS спрощує складний firmware, але додає власну складність: tasks, priorities, stacks, synchronization і debugging.;

Task у FreeRTOS — це незалежна функція, яку scheduler має змогу запускати як окремий потік виконання.; До FreeRTOS багато embedded-проєктів пишуться у стилі bare-metal: є собою один нескінченний цикл, обробники переривань і ручна логіка станів.; * багатоядерних microcontrollers;

  • multicore embedded processors;
  • ESP32-подібних сценаріїв;
  • parallel workloads;
  • більш складних embedded-систем;
  • розподілу задач між ядрами.;
  • висока пріоритетність — обробка критичної події;
  • середня — мережевий обмін;
  • нижча — актуалізація дисплея;
  • найнижча — фонове логування.;== FreeRTOS на STM32 ==

{{SEO


Вона застосовують, коли потрібно в embedded-системах забезпечується через 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-платформами.; * open source-проєктів;
  • комерційних пристроїв;
  • прототипів;
  • навчання;
  • IoT-продуктів;
  • firmware;
  • embedded SDK;
  • виробників hardware;
  • команд, які не хочуть складної ліцензійної моделі.; FreeRTOS — це легка open source операційна платформа реального часу для мікроконтролерів і малих мікропроцесорів.; Вона сприяє будувати embedded-пристрої з кількома задачами, передбачуваним scheduler, queues, semaphores, mutexes, timers, memory management і IoT-бібліотеками.; #include "FreeRTOS.h"
  1. include "task.h"
FreeRTOS має змогу використовуватися з мережевими стеком і бібліотеками для підключення до інтернету або локальної мережі.;