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_8mhz
gcc
Option: -DAVRHAL_CONFIG_avrctrl_8535_8mhz_small
gcc
Option: -DAVRHAL_CONFIG_avrctrl_m163_8mhz
gcc
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