Programmazione per Arduino senza l'IDE Arduino .. ma con le librerie fornite?


10

Di recente ho iniziato un nuovo progetto usando il mio Arduino che raccoglie polvere da un po '. Insieme alla scheda fisica che raccoglie la polvere, così ha fatto la mia copia di avr-gcc e delle librerie di Arduino. Riesco a gestire l'aggiornamento di avr-gcc, ma non ricordo come ho compilato le librerie di Arduino. Con la fonte Arduino, ci sono file sorgente elencati e simili, ma nessun makefile (che posso vedere) per costruire effettivamente la libreria. Non mi interessa costruire l'IDE, voglio solo la libreria in formato binario e i file di intestazione che mi serviranno. C'è qualche documentazione o simili per farlo?

Non voglio usare l'IDE di Arduino, preferisco usare il mio editor di testo e un makefile.


1
Questo può esserti utile.
Arminb

1
@arminb bleaklow.com/2010/06/04/a_makefile_for_arduino_sketches.html sarebbe più utile di così. Il tuo link offre solo un modo per costruire schizzi dalla riga di comando, non un modo per costruire la libreria arduino. In ogni caso è irrilevante perché ho risposto alla mia domanda
Earlz,


@jippie L'ho visto (non quando è stato chiesto, ma recentemente quando lo ho rivisto) ma sono stato scoraggiato dal fatto che devi avere l'IDE di Arduino installato. Tipo di sconfitte allo scopo
Earlz,

Risposte:


9

Ho creato un piccolo progetto con un sistema di compilazione personalizzato (usando Ruby) che lo rende piuttosto semplice senza dover installare l'IDE di Arduino. Fondamentalmente, utilizza un template Makefile e uno script ruby ​​per rendere estremamente semplice la compilazione delle librerie di Arduino. Puoi vederlo su https://github.com/Earlz/make-wiring

Tuttavia, lascio qui la vecchia risposta per informazioni su come creare la tua. È abbastanza ingombrante e fastidioso però:

Indicazioni:

  1. Scarica una copia del codice sorgente IDE di Arduino
  2. Copia il contenuto di hardware/arduino/cores/arduinoin una nuova directory che chiamerò arduino_build
  3. Copia il pins_arduino.hfile da qualsiasi variante di Arduino sia tua hardware/arduino/variants(controlla boards.txt se non sei sicuro) in arduino_build
  4. Aggiungi questo makefile 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

E poi corri e basta

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

E poi per usare le librerie compilate e simili puoi usare un semplice makefile come questo:

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

Inoltre, se provi a compilare le librerie in libraries/, otterrai un errore del linker se non fai le cose nel giusto ordine. Ad esempio, ho dovuto fare questo per utilizzare 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

La -larduinodeve essere l'ultimo della libreria sulla riga di comando

Comunque, questo è stato un modo abbastanza semplice per compilarlo per me. Quando usciranno le versioni future di Ardunio, questo makefile dovrebbe essere abbastanza a prova di futuro, richiedendo solo alcune modifiche a OBJS e HDRS. Inoltre, questo makefile dovrebbe funzionare sia con BSD che con GNU make

Vedi anche una versione leggermente modificata di questa risposta sul mio blog con un binario già compilato della libreria (compilato usando il "standard" pins_arduino.h).


** MODIFICA **

Ho scoperto che l'aggiunta dei seguenti flag di ottimizzazione del compilatore sia alla creazione del Makefile della libreria sia a ciascun singolo Makefile del progetto riduce notevolmente le dimensioni del file binario compilato finale. Ciò rende la dimensione binaria finale paragonabile a quella dell'IDE.

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

.

Quindi, per il makefile di compilazione della libreria:

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

e, per ogni makefile di progetto:

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

.

Rif: http://arduino.cc/forum/index.php?topic=153186.0


3

Se sei disposto a utilizzare l'IDE di Arduino una volta (o una volta per tipo di dispositivo), è il modo più semplice per creare una libreria statica e ottenere le fonti della libreria. Successivamente puoi utilizzare qualsiasi strumento di sviluppo adatto a te.

Questo articolo di Arduino (scritto per gli utenti che si spostano nell'IDE Eclipse) descrive la creazione della libreria Arduino compilando uno schizzo con l'IDE Arduino e recuperando la libreria dalla directory temporanea di Arduino. Scorri verso il basso di circa 1/4 della pagina fino alla sezione

  1. Copia della libreria da un progetto IDE di Arduino

0

Se hai solo bisogno di un sistema di build in grado di pilotare il tuo programmatore di microcontrollori, Platformio è tuo amico.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.