The HAL has been implemented according to the following general
principles:
The HAL is implemented in C and assembler, although the
eCos kernel is largely implemented in C++.
This is to permit the HAL the widest possible
applicability.
All interfaces to the HAL are implemented by
CPP macros. This allows them to be implemented as inline
C code, inline assembler or function calls to external C
or assembler code. This allows the most efficient
implementation to be selected without affecting the
interface. It also allows them to be redefined if the
platform or variant HAL needs to replace or enhance a definition
from the architecture HAL.
The HAL provides simple, portable mechanisms for dealing
with the hardware of a wide range of architectures and platforms.
It is always possible to bypass the HAL and program the hardware
directly, but this may lead to a loss of portability.