Programmation pour l'Arduino sans l'IDE Arduino .. mais avec les bibliothèques fournies?

10

J'ai récemment commencé un nouveau projet en utilisant mon Arduino qui ramasse la poussière depuis un moment. Avec la carte physique collectant la poussière, ma copie d'Avr-Gcc et des bibliothèques Arduino a également. Je peux gérer la mise à jour avr-gcc, mais je ne me souviens pas comment j'ai compilé les bibliothèques Arduino. Avec la source Arduino, il y a des fichiers sources répertoriés et autres, mais aucun makefile (que je peux voir) pour réellement construire la bibliothèque. Je ne me soucie pas de construire l'IDE, je veux juste la bibliothèque au format binaire et les fichiers d'en-tête dont j'ai besoin. Existe-t-il une documentation ou autre pour le faire?

Je ne veux pas utiliser l'IDE Arduino, je préfère utiliser mon propre éditeur de texte et un makefile.

Earlz
la source
1
Cela peut vous être utile.
arminb
1
@arminb bleaklow.com/2010/06/04/a_makefile_for_arduino_sketches.html serait plus utile que cela. Votre lien donne juste un moyen de construire des croquis à partir de la ligne de commande, pas un moyen de construire la bibliothèque Arduino.
Peu importe dans les
@jippie J'ai regardé cela (pas lorsqu'on lui a demandé, mais récemment lors de la révision), mais j'ai été rebuté par le fait que vous devez avoir l'IDE Arduino installé. Type de défait le but
Earlz

Réponses:

9

J'ai créé un petit projet avec un système de construction personnalisé (en utilisant Ruby) qui rend cela assez facile sans avoir à installer l'IDE Arduino. Fondamentalement, il utilise un modèle Makefile et un script ruby ​​pour rendre la compilation des bibliothèques Arduino extrêmement facile. Vous pouvez le voir sur https://github.com/Earlz/make-wiring

Cependant, je laisse l'ancienne réponse ici pour plus d'informations sur la façon de rouler la vôtre. C'est assez lourd et ennuyeux:

Instructions:

  1. Téléchargez une copie du code source Arduino IDE
  2. Copiez le contenu de hardware/arduino/cores/arduinodans un nouveau répertoire que j'appellerai arduino_build
  3. Copiez le pins_arduino.hfichier de la variante Arduino qui vous appartient hardware/arduino/variants(consultez boards.txt si vous n'êtes pas sûr) dans arduino_build
  4. Ajoutez ce 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

Et puis juste courir

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

Et puis, pour utiliser les bibliothèques compilées, vous pouvez utiliser un simple makefile comme celui-ci:

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

De plus, si vous essayez de compiler les bibliothèques dans, libraries/vous obtiendrez une erreur de l'éditeur de liens si vous ne faites pas les choses dans le bon ordre. Par exemple, j'ai dû le faire pour utiliser 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 -larduinodoit être la dernière bibliothèque sur la ligne de commande

Quoi qu'il en soit, c'était un moyen assez facile de le compiler pour moi. À mesure que les futures versions d'Ardunio sortiront, ce makefile devrait être assez évolutif, ne nécessitant que quelques modifications à OBJS et HDRS. En outre, ce makefile devrait fonctionner avec BSD make et GNU make

Voir aussi une version légèrement modifiée de cette réponse sur mon blog avec un binaire déjà compilé de la bibliothèque (compilé en utilisant le pins_arduino.h "standard").


** MODIFIER **

J'ai trouvé que l'ajout des indicateurs d'optimisation de compilateur suivants à la fois au Makefile de création de bibliothèque et à chaque Makefile de projet individuel réduit considérablement la taille du binaire compilé final. Cela rend la taille binaire finale comparable à celle de l'IDE.

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

.

Donc, pour le makefile de la bibliothèque:

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

et, pour chaque makefile de projet:

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

.

Réf: http://arduino.cc/forum/index.php?topic=153186.0

Earlz
la source
3

Si vous êtes prêt à utiliser l'Arduino IDE une fois (ou une fois par type de périphérique), c'est le moyen le plus simple de créer une bibliothèque statique, ainsi que d'obtenir les sources de la bibliothèque. Après cela, vous pouvez utiliser les outils de développement qui vous conviennent.

Cet article Arduino (écrit pour les utilisateurs passant à l'IDE Eclipse) décrit la construction de la bibliothèque Arduino en compilant un croquis avec l'IDE Arduino et en récupérant la bibliothèque à partir du répertoire temporaire d'Arduino. Faites défiler environ 1/4 de la page jusqu'à la section

  1. Copie de la bibliothèque à partir d'un projet Arduino IDE
JRobert
la source
0

Si vous avez juste besoin d'un système de construction qui peut également piloter votre programmeur de microcontrôleur, platformio est votre ami.

Luke Skywalker
la source