RTOS ovladače
Větší embedded projekty často používají RTOS,
tedy operační systém pro malé zařízení.
Mezi známé patří například
Zephyr,
NuttX
nebo FreeRTOS.
Samotné FreeRTOS řeší hlavně plánování úloh, fronty, semafory a časování. Zephyr a NuttX jdou dál: mají i rozsáhlý model ovladačů, konfiguraci desek a způsob, jak aplikaci odstínit od konkrétního hardwaru.
Zephyr
Zephyr
používá
device model.
Ovladač se v systému zaregistruje jako zařízení
a aplikace k němu přistupuje přes obecné API.
Například UART, SPI nebo I2C mají společné rozhraní. Aplikace potom nemusí vědět, jestli je pod ní periférie od STM32, Nordic nebo NXP. To řeší ovladač a konfigurace desky.
K tomu Zephyr používá také
devicetree.
Ten popisuje, jaký hardware na desce je
a jak je zapojený.
Je to trochu jako elektronický popis desky,
který čte překladač i systém.
NuttX
NuttX
má u mnoha ovladačů rozdělení na dvě části:
upper halfje obecná část ovladače, kterou vidí systém a aplikace,lower halfje část závislá na konkrétním čipu nebo desce.
To umožňuje, aby aplikace pracovala s běžným rozhraním,
třeba se souborem v /dev,
zatímco nízko pod tím je kód pro konkrétní hardware.
Proč je to silná vrstva
RTOS ovladače jsou výš než běžný HAL. Neřeší jen jeden zápis na pin, ale celý způsob, jak se zařízení v systému najde, inicializuje a používá.
Je to velmi užitečné u větších projektů.
Cena za to je větší složitost.
Když se něco pokazí,
hledáte chybu nejen v aplikaci,
ale i v konfiguraci desky, ovladači a někdy i v sestavení projektu.
Detailnější popis toho,
jak v NuttX vzniká ovladač,
je v dokumentaci k
device drivers.