Tôi đã tạo ra một dự án nhỏ với một hệ thống xây dựng tùy chỉnh (sử dụng Ruby) giúp việc này trở nên khá dễ dàng mà không cần phải cài đặt Arduino IDE. Về cơ bản, nó sử dụng một Makefile mẫu và một tập lệnh ruby để biên dịch các thư viện Arduino cực kỳ dễ dàng. Bạn có thể xem nó tại https://github.com/Earlz/make-wires
Tuy nhiên, tôi để lại câu trả lời cũ ở đây để biết thông tin về việc tự lăn. Mặc dù nó khá cồng kềnh và khó chịu:
Hướng:
- Tải về một bản sao của mã nguồn Arduino IDE
- Sao chép nội dung của
hardware/arduino/cores/arduino
một thư mục mới tôi sẽ gọi là arduino_build
- Sao chép
pins_arduino.h
tệp từ bất kỳ biến thể Arduino nào là của bạn từ hardware/arduino/variants
(kiểm tra bảng.txt nếu bạn không chắc chắn) vào arduino_build
- Thêm tệp này vào arduino_build:
.
#BSD licensed, see http://lastyearswishes.com/static/Makefile for full license
HDRS = Arduino.h binary.h Client.h HardwareSerial.h IPAddress.h new.h pins_arduino.h Platform.h Printable.h Print.h \
Server.h Stream.h Udp.h USBAPI.h USBCore.h USBDesc.h WCharacter.h wiring_private.h WString.h
OBJS = WInterrupts.o wiring_analog.o wiring.o wiring_digital.o wiring_pulse.o wiring_shift.o CDC.o HardwareSerial.o \
HID.o IPAddress.o main.o new.o Print.o Stream.o Tone.o USBCore.o WMath.o WString.o
#may need to adjust -mmcu if you have an older atmega168
#may also need to adjust F_CPU if your clock isn't set to 16Mhz
CFLAGS = -I./ -std=gnu99 -DF_CPU=16000000UL -Os -mmcu=atmega328p
CPPFLAGS = -I./ -DF_CPU=16000000UL -Os -mmcu=atmega328p
CC=avr-gcc
CPP=avr-g++
AR=avr-ar
default: libarduino.a
libarduino.a: ${OBJS}
${AR} crs libarduino.a $(OBJS)
.c.o: ${HDRS}
${CC} ${CFLAGS} -c $*.c
.cpp.o: ${HDRS}
${CPP} ${CPPFLAGS} -c $*.cpp
clean:
rm -f ${OBJS} core a.out errs
install: libarduino.a
mkdir -p ${PREFIX}/lib
mkdir -p ${PREFIX}/include
cp *.h ${PREFIX}/include
cp *.a ${PREFIX}/lib
Và sau đó chỉ cần chạy
make
make install PREFIX=/usr/arduino (or whatever)
Và sau đó để sử dụng các thư viện đã biên dịch và như vậy bạn có thể sử dụng một tệp thực hiện đơn giản như thế này:
default:
avr-g++ -L/usr/arduino/lib -I/usr/arduino/include -Wall -DF_CPU=16000000UL -Os -mmcu=atmega328p -o main.elf main.c -larduino
avr-objcopy -O ihex -R .eeprom main.elf out.hex
upload:
avrdude -c arduino -p m328p -b 57600 -P /dev/ttyUSB0 -U flash:w:out.hex
all: default upload
Ngoài ra, nếu bạn cố gắng biên dịch các thư viện trong đó, libraries/
bạn sẽ gặp lỗi liên kết nếu bạn không thực hiện đúng thứ tự. Chẳng hạn, tôi đã phải làm điều này để sử dụng SoftwareSerial:
avr-g++ -L/usr/arduino/lib -I/usr/arduino/include -Wall -DF_CPU=16000000UL -Os -mmcu=atmega328p -o main.elf main.c -lSoftwareSerial -larduino
Các -larduino
phải là thư viện cuối cùng trên dòng lệnh
Dù sao, đây là một cách khá dễ dàng để biên dịch nó cho tôi. Khi các phiên bản tương lai của Ardunio ra mắt, tệp tạo tệp này sẽ khá bằng chứng trong tương lai, chỉ cần một vài sửa đổi đối với OBJS và HDRS. Ngoài ra, tệp tạo tệp này sẽ hoạt động với cả BSD make và GNU make
Xem thêm một phiên bản sửa đổi một chút của câu trả lời này trên blog của tôi với thư viện nhị phân đã được biên dịch (được biên dịch bằng cách sử dụng "pin" tiêu chuẩn "pin_arduino.h).
** CHỈNH SỬA **
Tôi thấy rằng việc thêm các cờ tối ưu hóa trình biên dịch sau vào cả thư viện xây dựng Makefile và mỗi dự án riêng lẻ Makefile làm giảm đáng kể kích thước của tệp nhị phân được biên dịch cuối cùng. Điều này làm cho kích thước nhị phân cuối cùng có thể so sánh với IDE.
-Wl,--gc-sections -ffunction-sections -fdata-sections
.
Vì vậy, đối với thư viện xây dựng makefile:
CFLAGS = -I./ -std=gnu99 -DF_CPU=16000000UL -Os -Wl,--gc-sections -ffunction-sections -fdata-sections -mmcu=atmega328p
CPPFLAGS = -I./ -DF_CPU=16000000UL -Os -Wl,--gc-sections -ffunction-sections -fdata-sections -mmcu=atmega328p
và, cho mỗi dự án makefile:
avr-g++ -L/usr/arduino/lib -I/usr/arduino/include -Wall -DF_CPU=16000000UL -Os -Wl,--gc-sections -ffunction-sections -fdata-sections -mmcu=atmega328p -o main.elf main.c -larduino
.
Tham chiếu: http://arduino.cc/forum/index.php?topic=153186.0