Přeskočit na hlavní obsah

Vrstvy

Stejně jako zlobři, tak i kód pro vestavěné systémy má vrstvy. Ty v programování jsou ale většinou méně zelené a občas daleko strašidelnější.

Kód pro vestavěné systémy se dá psát v několika vrstvách. Úplně dole je samotný hardware. Úplně nahoře je aplikace, tedy část programu, která řeší skutečný úkol: blikání LED, měření teploty, řízení motoru nebo třeba komunikaci po rádiu.

Mezi tím bývají různé pomocné vrstvy. Některé jen pojmenují registry. Jiné připraví hotové funkce typu gpio_write(). A některé se snaží schovat rozdíly mezi celými rodinami čipů.

Tohle schéma není zákon. V jednom projektu můžete psát přímo do registrů. V jiném použijete HAL. A ve větším zařízení může aplikace mluvit jen s ovladači v operačním systému. HAL a LL jsou tady nakreslené vedle sebe záměrně. V praxi si často vyberete buď pohodlnější HAL, nebo tenčí LL. Některé knihovny mohou uvnitř používat pomocný nízkoúrovňový kód, ale pro programátora to obvykle nejsou dvě patra, která by musel vždy projít za sebou.

Někdy je to až moc vysoko

Abstrakce pomáhá, protože nemusíte pokaždé řešit všechny detaily čipu. Zároveň ale něco schovává. Když potřebujete speciální režim periferie, přesné časování nebo opravdu malý program, může být nižší vrstva jednodušší než velká knihovna.

Proč těch vrstev existuje tolik

Každá vrstva odpovídá na trochu jinou otázku:

  • Registry říkají: "Který bit v čipu mám změnit?"
  • CMSIS a hlavičkové soubory říkají: "Jak se ty registry jmenují v C?"
  • LL říká: "Dám ti malé funkce, ale pořád budeš blízko hardwaru."
  • HAL říká: "Dám ti pohodlnější funkce, ať nemusíš znát každý bit."
  • BSP říká: "Tahle deska má LED tady, tlačítko tady a krystal tady."
  • RTOS ovladače říkají: "Aplikace nemusí vědět, jaký přesně čip je pod ní."
  • Frameworky říkají: "Chci hlavně rychle napsat aplikaci."

Neexistuje jedna správná vrstva pro všechno. Dobrý embedded vývojář hlavně ví, na které vrstvě právě stojí a kdy má smysl jít o patro níž.