Le manuel d'utilisation de l'AVR-Libc contient un chapitre entier sur la façon de créer une bibliothèque . Je suggère de commencer par là. Si vous utilisez un IDE comme eclipse, des paramètres de projet seront applicables si vous souhaitez créer une bibliothèque au lieu d'un exécutable.
Éditer
Voici ce que fait éclipse lorsque je le configure pour votre exemple:
Pour qu'il ne puisse pas être compilé de manière triviale, j'ai changé votre test_function en:
#include "test.h"
void test_function()
{
volatile int i = 0;
i++;
}
Construire la bibliothèque:
avr-gcc -Wall -g2 -gstabs -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega328p -DF_CPU=16000000UL -MMD -MP -MF"test.d" -MT"test.d" -c -o"test.o" "../test.c"
avr-ar -r "libtest.a" ./test.o
avr-objdump -h -S libtest.a >"libtest.lss"
avr-size --format=avr --mcu=atmega328p libtest.a
Construire le programme principal
avr-gcc -I"C:\path\to\my\workspace\test" -Wall -g2 -gstabs -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega328p -DF_CPU=16000000UL -MMD -MP -MF"program.d" -MT"program.d" -c -o"program.o" "../program.c"
avr-gcc -Wl,-Map,MainProgram.map -L"C:\path\to\my\workspace\test\Release" -mmcu=atmega328p -o"MainProgram.elf" ./program.o -ltest
avr-objdump -h -S MainProgram.elf >"MainProgram.lss"
avr-size --format=avr --mcu=atmega328p MainProgram.elf
... et il se construit sans erreur. Je suppose que vous devez inclure les chemins spécifiés dans les lignes de commande. Il est également très important de suivre les conventions de dénomination appropriées, essayez de suivre le modèle ci-dessus. Évidemment, les commandes avr-objdump et avr-size sont juste pour plus d'informations et ne sont pas nécessaires si vous êtes en train de construire.
Je suis à peu près certain que si vous devez également recompiler votre bibliothèque pour des architectures cibles et des vitesses d'horloge spécifiques.