मैंने एक कस्टम बिल्ड सिस्टम (रूबी का उपयोग करके) के साथ एक छोटी सी परियोजना बनाई है जो Arduino IDE को स्थापित किए बिना इसे बहुत आसान बनाती है। मूल रूप से, यह Arduino पुस्तकालयों को बेहद आसान बनाने के लिए एक टेम्पलेट मेकफाइल, और एक रूबी स्क्रिप्ट का उपयोग करता है। आप इसे https://github.com/Earlz/make-wiring पर देख सकते हैं
हालाँकि, मैं अपना स्वयं का रोल करने की जानकारी के लिए पुराना उत्तर यहाँ छोड़ रहा हूँ। हालांकि यह काफी बोझिल और कष्टप्रद है:
दिशा:
- Arduino IDE स्रोत कोड की एक प्रति डाउनलोड करें
hardware/arduino/cores/arduino
एक नई निर्देशिका की सामग्री की प्रतिलिपि बनाएँ जिसे मैं arduino_build के रूप में संदर्भित करूँगा
- Arduino_build
pins_arduino.h
से जो भी Arduino संस्करण से फ़ाइल की प्रतिलिपि बनाएँhardware/arduino/variants
- इस 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/
एक लिंकर त्रुटि प्राप्त करेंगे यदि आप सही क्रम में चीजें नहीं करते हैं। उदाहरण के लिए, मुझे 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
कमांड लाइन पर पिछले पुस्तकालय होना चाहिए
वैसे भी, यह मेरे लिए इसे संकलित करने का एक बहुत आसान तरीका था। चूंकि अर्दुनियो के भविष्य के संस्करण सामने आते हैं, इसलिए इस मेकाइल को काफी भविष्य का प्रमाण होना चाहिए, जिसमें ओबीजेएस और एचडीआरएस के लिए कुछ संशोधनों की आवश्यकता होती है। इसके अलावा, इस मेकफाइल को BSD मेक और GNU मेक दोनों के साथ काम करना चाहिए
पुस्तकालय के पहले से संकलित बाइनरी ("मानक" pins_arduino.h का उपयोग करके संकलित) के साथ मेरे ब्लॉग पर इस उत्तर का थोड़ा संशोधित संस्करण भी देखें ।
** EDIT **
मैंने पाया कि लाइब्रेरी बिल्डिंग मेकफाइल और प्रत्येक व्यक्तिगत प्रोजेक्ट दोनों में निम्नलिखित कंपाइलर ऑप्टिमाइज़ेशन फ़्लैग्स को जोड़ने से मेकफाइल अंतिम संकलित बाइनरी के आकार को बहुत कम कर देता है। यह IDE की तुलना में अंतिम बाइनरी आकार बनाता है।
-Wl,--gc-sections -ffunction-sections -fdata-sections
।
इसलिए, पुस्तकालय निर्माण के लिए मेकफाइल:
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
और, प्रत्येक प्रोजेक्ट मेकाइल के लिए:
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
।
संदर्भ: http://arduino.cc/forum/index.php?topic=153186.0