Programación para el Arduino sin el IDE Arduino ... pero con las bibliotecas proporcionadas?

10

Recientemente comencé un nuevo proyecto usando mi Arduino que ha estado acumulando polvo por un tiempo. Junto con la placa física que acumula polvo, también lo ha hecho mi copia de avr-gcc y las bibliotecas Arduino. Puedo administrar la actualización de avr-gcc, pero no recuerdo cómo compilé las bibliotecas Arduino. Con la fuente Arduino, hay una lista de archivos fuente y tal, pero no hay un archivo MAKE (que puedo ver) para construir realmente la biblioteca. No me importa construir el IDE, solo quiero la biblioteca en formato binario y los archivos de encabezado que necesitaré. ¿Hay alguna documentación o tal para hacer esto?

No quiero usar Arduino IDE, prefiero usar mi propio editor de texto y un archivo MAKE.

Earlz
fuente
1
Esto puede ser útil para usted.
arminb
1
@arminb bleaklow.com/2010/06/04/a_makefile_for_arduino_sketches.html sería más útil que eso. Su enlace solo ofrece una forma de crear bocetos desde la línea de comandos, no una forma de construir la biblioteca arduino. Irrelevante de cualquier manera porque he respondido a mi propia pregunta
Earlz
@jippie Lo miré (no cuando se le preguntó, sino recientemente cuando volví a visitarlo), pero me desanimó el hecho de que debe tener instalado el IDE de Arduino. Tipo de derrotas del propósito
Earlz

Respuestas:

9

He creado un pequeño proyecto con un sistema de compilación personalizado (usando Ruby) que lo hace bastante fácil sin tener que instalar el IDE de Arduino. Básicamente, utiliza una plantilla Makefile y un script ruby ​​para hacer que compilar las bibliotecas Arduino sea extremadamente fácil. Puedes verlo en https://github.com/Earlz/make-wiring

Sin embargo, estoy dejando la respuesta anterior aquí para obtener información sobre cómo hacer la suya. Sin embargo, es bastante engorroso y molesto:

Direcciones:

  1. Descargue una copia del código fuente de Arduino IDE
  2. Copie el contenido de hardware/arduino/cores/arduinoa un nuevo directorio al que me referiré como arduino_build
  3. Copie el pins_arduino.harchivo de la variante Arduino que sea suya hardware/arduino/variants(consulte boards.s.xt si no está seguro) a arduino_build
  4. Agregue este archivo MAKE 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 solo corre

make
make install PREFIX=/usr/arduino (or whatever)

Y luego, para hacer uso de las bibliotecas compiladas, puede usar un archivo MAKE simple 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 intenta compilar las bibliotecas libraries/, obtendrá un error de vinculador si no hace las cosas en el orden correcto. Por ejemplo, tuve que hacer esto para usar 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 -larduinodebe ser la última biblioteca en la línea de comandos

De todos modos, esta fue una manera bastante fácil de compilarlo para mí. A medida que salgan las futuras versiones del Ardunio, este archivo MAKE debe ser bastante seguro para el futuro, y requiere solo algunas modificaciones a OBJS y HDRS. Además, este archivo MAKE 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 usando el "estándar" pins_arduino.h).


** EDITAR **

Descubrí que agregar los siguientes indicadores de optimización del compilador tanto al Makefile del edificio de la biblioteca como a cada Makefile del proyecto individual reduce en gran medida el tamaño del binario compilado final. Esto hace que el tamaño binario final sea comparable al del IDE.

-Wl,--gc-sections -ffunction-sections  -fdata-sections  

.

Entonces, para el makefile de compilación de la biblioteca:

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 proyecto 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

Earlz
fuente
3

Si está dispuesto a usar Arduino IDE una vez (o una vez por tipo de dispositivo), es la forma más fácil de construir una biblioteca estática, así como obtener las fuentes de la biblioteca. Después de eso, puede usar las herramientas de desarrollo que más le convengan.

Este artículo de Arduino (escrito para usuarios que se mudan al IDE de Eclipse) describe la construcción de la biblioteca de Arduino compilando un boceto con el IDE de Arduino y recuperando la biblioteca del directorio temporal de Arduino. Desplácese hacia abajo aproximadamente 1/4 de la página a la sección

  1. Copiar la biblioteca de un proyecto IDE de Arduino
JRobert
fuente
0

Si solo necesita un sistema de compilación que también pueda poner a prueba su programador de microcontroladores, platformio es su amigo.

Luke Skywalker
fuente