ฉันได้สร้างโครงการเล็ก ๆ ด้วยระบบ build ที่กำหนดเอง (โดยใช้ Ruby) ที่ทำให้มันง่ายมากโดยไม่ต้องติดตั้ง Arduino IDE โดยพื้นฐานแล้วมันใช้เท็มเพลต Makefile และสคริปต์ทับทิมเพื่อทำให้การรวบรวมไลบรารี Arduino นั้นง่ายมาก คุณสามารถดูได้ที่https://github.com/Earlz/make-wiring
อย่างไรก็ตามฉันจะทิ้งคำตอบเก่าไว้ที่นี่สำหรับข้อมูลเกี่ยวกับการกลิ้งของคุณเอง มันค่อนข้างยุ่งยากและน่ารำคาญ แต่:
ทิศทาง:
- ดาวน์โหลดสำเนาของซอร์สโค้ด IDE IDE
- คัดลอกเนื้อหาของ
hardware/arduino/cores/arduino
ไปยังไดเรกทอรีใหม่ฉันจะเรียกว่า arduino_build
- คัดลอก
pins_arduino.h
ไฟล์จากตัวแปร Arduino ตัวไหนเป็นของคุณจากhardware/arduino/variants
(ตรวจสอบ boards.txt หากคุณไม่แน่ใจ) เพื่อ arduino_build
- เพิ่ม makefile นี้ไปที่ 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
และจากนั้นก็วิ่ง
make
make install PREFIX=/usr/arduino (or whatever)
จากนั้นเพื่อใช้ประโยชน์จากไลบรารีที่คอมไพล์และเช่นนี้คุณสามารถใช้ไฟล์ง่าย ๆ แบบนี้:
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
นอกจากนี้หากคุณพยายามรวบรวมห้องสมุดในlibraries/
คุณจะได้รับข้อผิดพลาด linker หากคุณไม่ทำสิ่งที่ถูกต้อง ตัวอย่างเช่นฉันต้องทำสิ่งนี้เพื่อใช้ 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
-larduino
ต้องเป็นห้องสมุดสุดท้ายในบรรทัดคำสั่ง
อย่างไรก็ตามนี่เป็นวิธีที่ง่ายในการรวบรวมสำหรับฉัน เมื่อเวอร์ชันของ Ardunio ออกมาในอนาคตไฟล์นี้ควรจะได้รับการพิสูจน์ในอนาคตโดยต้องมีการแก้ไข OBJS และ HDRS เพียงเล็กน้อย นอกจากนี้ makefile นี้ควรทำงานกับทั้ง BSD make และ GNU make
ดูคำตอบนี้ในเวอร์ชั่นที่แก้ไขเล็กน้อยในบล็อกของฉันด้วยไบนารีที่คอมไพล์แล้วของไลบรารี (เรียบเรียงโดยใช้หมุด "มาตรฐาน"
** แก้ไข **
ฉันพบว่าการเพิ่มแฟล็กการปรับให้เหมาะสมของคอมไพเลอร์ต่อไปนี้ลงในทั้ง Makefile การสร้างไลบรารีและแต่ละโครงการ Makefile จะลดขนาดของไบนารีที่คอมไพล์ขั้นสุดท้ายลงอย่างมาก นี่ทำให้ขนาดไบนารีสุดท้ายเทียบได้กับของ IDE
-Wl,--gc-sections -ffunction-sections -fdata-sections
.
ดังนั้นสำหรับ 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
และสำหรับ 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
.
Ref: http://arduino.cc/forum/index.php?topic=153186.0