He creado un pequeño proyecto con un sistema de construcción personalizado (usando Ruby) que lo hace bastante fácil sin tener que instalar el IDE de Arduino. Básicamente, utiliza un Makefile de plantillas, y un rubí script para hacer la compilación de las librerías de Arduino extremadamente fácil. Podéis verlo en https://github.com/Earlz/make-wiring
Sin embargo, dejo la vieja respuesta aquí para información sobre el rodaje de la tuya. Es bastante engorroso y molesto, sin embargo:
Instrucciones:
- Descargue una copia del código fuente del IDE de Arduino
- Copia el contenido de
hardware/arduino/cores/arduino
a un nuevo directorio al que me referiré como arduino_build
- Copia el
pins_arduino.h
archivo de cualquier variante de Arduino de la que sea suyo hardware/arduino/variants
(compruebe el boards.txt si no está seguro) para arduino_build
- Añade este archivo a 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
Y luego simplemente corre
make
make install PREFIX=/usr/arduino (or whatever)
Y luego, para hacer uso de las bibliotecas compiladas y demás, se puede utilizar un simple archivo como este:
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
Además, si intentas compilar las bibliotecas en libraries/
tendrás un error de enlace si no haces las cosas en el orden correcto. Por ejemplo, tuve que hacer esto para usar el 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
El -larduino
debe ser la última biblioteca en la línea de mando
De todos modos, esta fue una forma bastante fácil de compilarlo para mí. A medida que salgan las futuras versiones de Ardunio, este archivo debería ser a prueba de futuro, requiriendo sólo unas pocas modificaciones en OBJS y HDRS. Además, este makefile debería funcionar tanto con BSD make como con GNU make
Vea también una versión ligeramente modificada de esta respuesta en mi blog con un binario ya compilado de la biblioteca (compilado con el pins "estándar" de arduino.h).
** EDITAR **
Encontré que al agregar las siguientes banderas de optimización del compilador tanto al Makefile del edificio de la biblioteca como a cada proyecto individual, el Makefile reduce enormemente el tamaño del binario compilado final. Esto hace que el tamaño del binario final sea comparable al del IDE.
-Wl,--gc-sections -ffunction-sections -fdata-sections
.
Así que, para la biblioteca construye un archivo:
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
y, para cada archivo de proyecto:
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