Die AVR HAL Bibliothek stellt eine C API für den Zugang zu standardisierten Hardwarekomponenten, wie LED, LCD, Tasten und Sensoren, bereit. Mit Hilfe der Bibliothek können allgemeingültige Anwendungen für spezifische Boards auf Basis des AVR Mikrocontrollers programmiert werden. Die Bibliothek ist aus der Entwicklung von "AVR-Ctrl Lib", einer speziellen Hardwareabstraktion des AVR-Ctrl Boards, entstanden. Die Bibliothek wurde gezielt nur für die Benutzung in Verbindung mit dem GNU C Compiler und der avr-libc entwickelt. Es existieren einige API Adaptionen zum CodeVision C Compiler.
configure Option --enable-board=BOARD benutzt, wobei BOARD einer der folgenden Bezeichner sein kann:
libavrhal-BOARD-MCU-CLOCK-EXT.a, und ein zugehöriger Konfigurationsheader namens BOARD-MCU-CLOCK-EXT.h in der Interfacedefinition der Bibliothek. Es besteht die Möglichkeit, für jede Boardkonfiguration die dazugehörige AVR HAL Bibliothek hintereinader zu erzeugen und zu installieren. Für das AVR-Ctrl Board hätte das folgendes Aussehen:
/configure --enable-board=avrctrl-8535-8mhz && make install $(PREFIX)/avr/include/avrhal/avrctrl-8535-8mhz.h $(PREFIX)/avr/lib/libavrhal-avrctrl-8535-8mhz.a/configure --enable-board=avrctrl-8535-8mhz-small && make install $(PREFIX)/avr/include/avrhal/avrctrl-8535-8mhz-small.h $(PREFIX)/avr/lib/libavrhal-avrctrl-8535-8mhz-small.a/configure --enable-board=avrctrl-m163-8mhz & make install $(PREFIX)/avr/include/avrhal/avrctrl-m163-8mhz.h $(PREFIX)/avr/lib/libavrhal-avrctrl-m163-8mhz.a/configure --enable-board=avrctrl-m163-8mhz-small && make install $(PREFIX)/avr/include/avrhal/avrctrl-m163-8mhz-small.h $(PREFIX)/avr/lib/libavrhal-avrctrl-m163-8mhz-small.a
#include <avrhal/key.h> #include <avrhal/lcd.h>
Hiermit wird der Präprozessor automatisch den Configuration Wrapper mit einbinden (avrhal/configure.h). Dieser muß über ein Predefine konfiguriert werden. Nur so kann dieser die richtige Boardkonfiguration bereitstellen (z.B. für --enable-board=avrctrl-8535-8mhz der Inhalt von avrhal/avrctrl-8535-8mhz.h). Das Predefine, in Form eines CPP Makros, muß im eigenen AVR Projekt erfolgen. Im Regelfall wird diese Makrodefinition über die gcc Option -D vorgenommen. Folgende Definitionen sind möglich und stehen in direktem Zusammenhang zu obigen Board Bezeichnern:
gcc Option: -DAVRHAL_CONFIG_avrctrl_8535_8mhzgcc Option: -DAVRHAL_CONFIG_avrctrl_8535_8mhz_smallgcc Option: -DAVRHAL_CONFIG_avrctrl_m163_8mhzgcc Option: -DAVRHAL_CONFIG_avrctrl_m163_8mhz_small
ld Option: -lavrhal-avrctrl-8535-8mhzld Option: -lavrhal-avrctrl-8535-8mhz-smallld Option: -lavrhal-avrctrl-m163-8mhzld Option: -lavrhal-avrctrl-m163-8mhz-small