Co je RTOS a proč jej používat
RTOS (Real-Time Operating System) je operační systém navržený pro deterministické chování – tedy schopnost garantovat časově omezenou odezvu na události. Na rozdíl od běžných operačních systémů (Windows, Linux bez rozšíření pro real-time) klade RTOS důraz na přesné plánování úloh, predikovatelnost latencí a řízení zdrojů tak, aby kritické funkce systému (řízení motoru, brzd, ovládání robota, audio pipeline, rádiová komunikace) splnily své termíny (deadline).
- Determinismus: chování úloh je analyticky předvídatelné (WCET, doba odezvy).
- Malá stopa: nízké nároky na paměť (desítky až stovky kB), běh na MCU bez MMU.
- Modularita: jádro, plánovač, synchronizační primitiva, mezivláknová komunikace (IPC), časovače, ovladače (drivery).
- Bezpečnost: izolace, MPU/MMU, watchdog, zpracování chyb (fault-handling), certifikované varianty.
Typy real-time požadavků
- Hard real-time: zmeškání termínu je nepřijatelné (brzdový systém, kardiostimulátor). Návrh musí prokázat splnitelnost termínů i v nejhorším případě.
- Firm real-time: občasné zmeškání je tolerovatelné, ale snižuje užitek (síťová brána s QoS).
- Soft real-time: preferuje se nízká latence a jitter, ale zmeškání termínu není kritické (audio streaming).
Časování, latence a metriky
- WCET (Worst-Case Execution Time): horní hranice doby běhu úlohy na dané konfiguraci CPU a kompilátoru.
- ISR latency: doba od vzniku přerušení po jeho obsluhu (ovlivňují maskování, priorita, kritické sekce).
- Schedulovací latence: doba od uvolnění nejvyšší úlohy připravené k běhu do jejího spuštění (kontextové přepnutí, preempce).
- Jitter: kolísání periody nebo odezvy; minimalizuje se výběrem plánovače, beztikovým režimem (tickless) a omezením kritických sekcí.
Plánovací algoritmy v RTOS
Volba plánovače ovlivňuje predikovatelnost a využití CPU. Běžně se používají:
- Fixní priority (preemptivní): každé úloze je přiřazena priorita; vždy běží nejvyšší prioritní připravená úloha. Často doplněno o priority inheritance, aby se zabránilo inverzi priorit.
- Rate-Monotonic (RM): periodičtějším úlohám je přiřazena vyšší priorita (fixní); analyticky lze ověřit splnitelnost dle využití CPU.
- Deadline-Monotonic (DM): kratší deadline znamená vyšší prioritu (fixní).
- Earliest Deadline First (EDF): dynamický plánovač, který vždy spouští úlohu s nejbližším deadlinem; na jednojádrových systémech je při nízké režii optimální.
- Round-Robin: časové dělení mezi úlohami stejné priority; často se kombinuje s fixními prioritami.
Analýza splnitelnosti (schedulability)
Pro hard real-time systémy se provádí formální ověření, že všechny úlohy dokončí své termíny i v nejhorším možném scénáři.
- Utilizační testy (Liu & Layland): pro RM platí mez pro n periodických úloh U ≤ n(2^{1/n} − 1).
- Response Time Analysis (RTA): iterativní výpočet nejhorší doby odezvy úlohy, zahrnující interferenci vyšších priorit a blokace mutexy.
- Jednoúčelové úlohy a sporadické servery: návrh pro obsluhu aperiodických požadavků bez ohrožení periodických úloh.
Úlohy, vlákna a stavy
- Stavy: běžící (running), připravený (ready), blokovaný (na semaforu/frontě), pozastavený (suspended), odložený (delay – časovač), ukončený (terminated).
- Atributy: priorita, zásobník (stack), afinitní jádro (SMP), perioda/deadline, hook pro sledování.
- Životní cyklus: vytváření/zničení, pozastavení/obnovení, odložení, změna priority, událostmi řízený běh.
Přerušení (ISR) a kontextové přepínání
ISR musí být co nejkratší: pouze přečíst/uložit data, odmaskovat přerušení, notifikovat úlohu (semafory, fronty, event flagy). Náročnější zpracování přesunout do úloh s nižší prioritou. Je nezbytné:
- Minimalizovat dobu se zakázanými přerušeními.
- Nepoužívat blokující RTOS volání v ISR, pokud nejsou explicitně povolená.
- Správně mapovat priority NVIC (ARM Cortex-M) a úrovně priorit RTOS.
Synchronizační primitiva a IPC
- Mutex: zajišťuje exkluzivní přístup s podporou priority inheritance nebo priority ceiling proti inverzi priorit.
- Binární semafor: signalizuje událost (typicky z ISR na úlohu).
- Počítaný semafor: omezená kapacita zdroje (např. DMA kanály).
- Fronty (message queues): přenos datových struktur mezi úlohami, často s kopírováním nebo zero-copy metodou.
- Event groups: bitová maska pro agregaci signálů z více zdrojů.
- Mailboxes/stream buffers: efektivní proudová data (UART, audio).
- Časovače (software timers): odložené akce, periodické úkoly bez aktivního čekání.
Inverze priorit: detekce a mitigace
Inverze priorit nastává, když nízkoprioritní úloha blokuje vysokoprioritní kvůli sdílenému zámku. Řešení:
- Priority Inheritance: dočasné zvýšení priority držitele zámku.
- Priority Ceiling: zámek má „strop“ priority; při jeho zamčení se úloha automaticky zvýší na tuto hodnotu.
- Lock-free/RCU: tam, kde je vhodné a bezpečné, volit bez-zámkové datové struktury.
Paměť a ochrana
- Statická alokace: preferovaná v bezpečnostně kritických systémech, předvídatelná.
- Dynamická alokace: pokud je nutná, použít deterministický alokátor (např. TLSF), pooly pevných bloků.
- MPU/MMU: ochrana proti přetečení zásobníku, izolace úloh a ovladačů, sandboxing.
- Velikost zásobníku: měření high watermark, ochranné pásmo (guard band), detekce přetečení.
Tick vs. tickless, časování a spotřeba
- Tick-based: periodický systémový tik (např. 1 ms). Jednodušší, ale vyšší jitter a spotřeba energie.
- Tickless: plánovač si nastaví nejbližší budík; nižší spotřeba a jitter, ale vyšší složitost implementace.
- RTC/Low-power timers: slouží k uspání MCU a přesnému probuzení; vyžadují synchronizaci s jádrem RTOS.
Drivery, DMA a práce s periferiemi
V návrhu RTOS se doporučuje vrstvení: ISR → lehký HAL/BSP → fronty/eventy → úlohy. DMA snižuje zátěž CPU a jitter, ale vyžaduje správu cache a bariér (zejména u MCU s cache). Překrytí paměti, dvojité bufferování a „ping-pong“ techniky jsou standardem pro streamy (ADC, I2S, UART).
Síťování a průmyslové protokoly
- TCP/IP stack: lwIP, podpora IPv4/IPv6, TLS offload, MQTT.
- Průmyslové protokoly: CAN/CAN-FD, LIN, Modbus, EtherCAT; důraz na přesné cykly a nízké latence.
- TSN (Time-Sensitive Networking): deterministický Ethernet (časová synchronizace, plánování přenosů).
Multiprocesorové RTOS: SMP vs. AMP
- SMP: jedno plánovače pro více CPU jader; sdílené fronty, afinitní vazby, zámky, koherence cache.
- AMP: každé jádro běží vlastní OS/RTOS; komunikace probíhá přes RPMsg, mailboxes, sdílenou paměť.
- Heterogenní SoC: kombinace A-core (Linux) a M-core (RTOS) s remoteproc a virtio kanály.
Hypervizory a smíšeně kritické systémy
Pro konsolidaci funkcí a separaci domén lze využít lehké hypervizory (bare-metal partitioning, typ 1). Umožňují koexistenci bezpečnostně kritických částí (ASIL, DAL) s méně kritickými aplikacemi bez vzájemného rušení.
Real-time Linux vs. RTOS
- PREEMPT_RT: rozšiřuje Linux o lepší latence; vhodný pro vyšší vrstvy a komplexní stacky.
- RTOS: nižší režie, menší paměťová stopa, hlubší kontrola nad časováním. Často doplňuje Linux na jiném jádře.
Bezpečnost a spolehlivost
- Watchdog a brown-out: zotavení z blokací a poklesů napětí.
- Fail-safe a fail-operational: definice bezpečných stavů a degradovaných režimů.
- Ochrana proti útokům: secure boot, kryptografické podpisy, řízení práv úloh, ASLR (kde je dostupné), OTA aktualizace s rollbackem.
- Standardy: MISRA C/C++, CERT C, ISO 26262 (automotive), IEC 61508 (průmyslové systémy), DO-178C (letectví), IEC 62304 (medicína).
Volba RTOS a ekosystém
- FreeRTOS/Azure RTOS ThreadX: široká podpora MCU, velká komunita, nástroje pro trace.
- Zephyr: modulární, device tree, rozsáhlé subsystémy (BLE, TCP/IP, senzorika).
- VxWorks, QNX: komerční, certifikovatelné, bohaté nástroje a dlouhodobá podpora.
- RTEMS, NuttX, μC/OS: další ověřené varianty dle požadavků licence a funkcí.
Build, CI/CD a aktualizace
- Reprodukovatelné buildy: uzamčení verzí toolchainu, kontejnerizace, hermetické build skripty.
- Testy v CI: jednotkové testy (Ceedling/CppUTest), integrační, regresní, pokrytí kódu.
- HIL (Hardware-in-the-Loop): automatizované testy s reálným hardwarem, měření latencí.
- OTA: A/B sloty, kryptografické podpisy, bezpečný bootloader, robustní rollback.
Diagnostika a tracing v RTOS
- Statistiky běhu: využití CPU na úlohu, délky front, watermarky zásobníků.
- Trace: sledování přepínání úloh, ISR, blokací; nástroje jako ITM/SWO, ETM, trace knihovny.
- Logování bez blokování: kruhový buffer, DMA do UART/USB, časová razítka s vysokým rozlišením.
Doba spuštění a start systému
- Inicializace časovačů a NVIC: prioritizace kritických periferií před méně důležitými.
- Minimalizace doby do „ready“ stavu: lazy init, deferované práce v nízkoprioritních úlohách.
- Self-testy: CRC FW, testy RAM, sanity checky periferií.
Návrhové vzory pro RTOS aplikace
- Producer–Consumer: ISR nebo senzory generují data do front; zpracování v pracovní úloze.
- Command Dispatcher: fronta příkazů pro driver nebo komunikační stack.
- State Machine per Task: každá úloha implementuje explicitní stavový automat; zlepšuje čitelnost a údržbu.
- Time-Triggered Architecture: cyklické spouštění úloh s přesnými časy (major/minor cycle).
Typické pasti a jak se jim vyhnout
- Nadměrné používání mutexů vede k deadlockům a jitteru; preferujte fronty a bez-zámkové postupy.
- Dlouhá ISR a příliš rozsáhlé maskování přerušení způsobují vysoké latence.
- Špatné dimenzování zásobníků vede ke záhadným pádům; sledujte watermarky.
- Neřízená dynamická alokace způsobuje fragmentaci; používejte pooly a statickou alokaci.
- Nedostatečné zohlednění cache a bariér u DMA vede k nekonzistentním datům.
Ukázková architektura malé RTOS aplikace
- Úlohy: CommTask (vysoká priorita) pro RX/TX, ControlTask (střední priorita) pro regulaci, LoggerTask (nízká priorita) pro záznam dat.
- ISR: UART RX ISR plní


























