AVR-Libc用户手册整章介绍了如何构建库。我建议从那里开始。如果您使用像eclipse之类的IDE,那么如果您要构建为库而不是可执行文件,则将有适用的项目设置。
编辑
这是我为您的示例设置eclipse时所做的:
为了将其简单地编译掉,我将您的test_function更改为:
#include "test.h"
void test_function()
{
volatile int i = 0;
i++;
}
建立图书馆:
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
构建主程序
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
...并且它的构建没有错误。我的猜测是您需要包含命令行中指定的路径。遵循正确的命名约定也很重要,请尝试并遵循上面的模式。显然,avr-objdump和avr-size命令仅用于提供更多信息,如果您正在构建,则不需要。
我非常确定,如果您需要针对特定的目标体系结构和时钟速度重新编译您的库。