Přeskočit na hlavní obsah

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 half je obecná část ovladače, kterou vidí systém a aplikace,
  • lower half je čá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.