Warstwa abstrakcji sprzętu (HAL)
Cienka warstwa oprogramowania, która chowa adresy rejestrów i różnice między układami za funkcjami typu uart_write().
Bez HAL-a aplikacja grzebie bezpośrednio w rejestrach peryferiów i każda zmiana mikrokontrolera oznacza jej przepisanie. Z HAL-em wywołuje interfejs, a zmienia się tylko warstwa pod spodem. Windows NT zbudowano tak w 1993 roku — hal.dll oddzielał jądro od szczegółów płyty głównej, dzięki czemu ten sam system działał na x86, MIPS i Alpha. Android ma moduły HAL dla kamer i czujników.
W systemach wbudowanych jest to albo biblioteka producenta, jak HAL STM32Cube od ST, albo społeczności, jak rustowy embedded-hal, w którym sterownik czujnika pisze się względem traitów, a nie konkretnego układu. Odwieczna skarga brzmi, że ogólność kosztuje: wywołanie HAL przełączające pin potrafi zająć pięćdziesiąt cykli, gdy zapis do rejestru zajmuje jeden. Wiele projektów kończy więc z HAL-em wszędzie poza tym jednym przerwaniem, na którym to ma znaczenie.