ハードウェア抽象化レイヤ (HAL)
レジスタのアドレスやチップごとの違いを、uart_write()のような関数の裏に隠す薄いソフトウェア層。
HALがなければ、アプリケーションは周辺機器のレジスタを直接叩くことになり、マイコンを変えるたびに書き直しになる。HALがあれば、アプリケーションはインターフェースを呼ぶだけで、変わるのは下の層だけだ。1993年のWindows NTはこの設計で作られ、hal.dllがカーネルとマザーボード固有の部分を分離したことで、同じOSがx86、MIPS、Alphaで動いた。AndroidにもカメラやセンサーのためのHALモジュールがある。
組み込みの世界では、STのSTM32Cube HALのようなベンダー製か、Rustのembedded-halのようなコミュニティ製を使う。後者ではセンサーのドライバが特定のチップではなくトレイトに対して書かれる。定番の不満は、汎用性に代償があることだ。ピンを切り替えるHAL呼び出しが50サイクルかかる一方、レジスタへの書き込みなら1サイクルで済む。結局、多くのプロジェクトは、肝心な割り込み一か所だけを除いてHALだらけになる。