Hướng dẫn sử dụng AVR-Libc có cả một chương về cách xây dựng thư viện . Tôi sẽ đề nghị bắt đầu từ đó. Nếu bạn sử dụng IDE như nhật thực, sẽ có các cài đặt dự án có thể áp dụng nếu bạn muốn xây dựng như một thư viện thay vì thực thi.
Biên tập
Đây là những gì nhật thực làm khi tôi thiết lập nó cho ví dụ của bạn:
Để nó không thể được biên dịch một cách tầm thường, tôi đã thay đổi test_feft của bạn thành:
#include "test.h"
void test_function()
{
volatile int i = 0;
i++;
}
Xây dựng thư viện:
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
Xây dựng chương trình chính
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
... Và nó được xây dựng không có lỗi. Tôi đoán là bạn cần bao gồm các đường dẫn được chỉ định trong các dòng lệnh. Thực hiện theo các quy ước đặt tên thích hợp cũng khá quan trọng, hãy thử và làm theo mẫu ở trên. Rõ ràng các lệnh avr-objdump và avr-size chỉ để biết thêm thông tin và không bắt buộc nếu bạn chỉ đang xây dựng.
Tôi khá chắc chắn rằng nếu bạn sẽ cần biên dịch lại thư viện của mình cho các kiến trúc đích cụ thể và tốc độ đồng hồ.