web-dev-qa-db-fra.com

Ligne de commande Arduino compilant et téléchargeant?

Comment puis-je compiler et télécharger Arduino croquis à partir de la ligne de commande sur Mac et Linux? J'ai installé l'environnement de programmation Arduino. Existe-t-il des exemples de makefiles quelque part?

39
Mark Harrison

La compilation et le téléchargement de croquis (tels qu'ils sont apposés sur des sources C/C++) sur la ligne de commande (sous Windows, Mac et Linux) sont pris en charge directement via des indicateurs vers l'exécutable arduino depuis la 1.5.0.

Une ino peut être compilée et téléchargée avec arduino --upload [sketch.ino]

Documentation

13
user1823664

Il existe une boîte à outils Arduino en ligne de commande nommée Ino . Il fait juste ça.

39
nkrkv

Ceci est mon gnu passe-partout à inclure pour les projets AVR, vous devrez peut-être en adapter une partie pour l'adapter à votre environnement. Il crée des dépendances, a un hôte d'options gcc standard que je trouve utiles ou qui optimisent la taille, ainsi qu'un répertoire de bibliothèque que j'utilise. J'ai utilisé cela avec succès pour compiler le logiciel Arduino, j'ai également piraté le PdePreprocessor dans l'éditeur Arduino pour l'exécuter à partir de la ligne de commande pour générer tout le vaudou:

https://github.com/wesen/mididuino/blob/master/app/src/processing/app/preproc/PdePreprocessor.Java

#
# generic AVR makefile
#
# (c)  July 2011 - Manuel Odendahl - [email protected]
#

# include this into your main Makefile, after having defined TARGET and TARGET_OBJS

all: $(TARGET).hex

CURDIR := $(dir $(lastword $(MAKEFILE_LIST)))
include $(CURDIR)MidiCtrl.mk

CC             = avr-gcc
CXX            = avr-g++
OBJCOPY        = avr-objcopy
AVR_Arch       ?= atmega64
LDAVR_Arch     ?= avrmega64
FLASH_PROTOCOL = jtag2

CFLAGS   += -Os -ffunction-sections -DAVR -I. -mmcu=$(AVR_Arch) -mcall-prologues -fshort-enums -fpack-struct -Wall -Werror
CFLAGS   += -Wall -DLITTLE_ENDIAN -g -flto

CFLAGS += no-tree-loop-optimize -ffreestanding -morder1 -funsigned-char -funsigned-bitfields -fshort-enums -fpack-struct
CFLAGS += -fdata-sections -fno-split-wide-types -fno-inline-small-functions -mcall-prologues

CLDFLAGS += -Wl,--relax,--gc-sections -ffunction-sections
CLDFLAGS += -mmcu=$(AVR_Arch)
LDFLAGS  = -m $(LDAVR_Arch) -M

# generate list
# CFLAGS += -Wa,[email protected]

%.o: %.cpp
        $(CXX) $(CXXFLAGS) -c $< -o $@

%.o: %.c
        $(CC) $(CFLAGS) -c $< -o $@

%.o: %.s
        $(CC) $(CFLAGS) -c $< -o $@

%.s: %.c
        $(CC) -S $(CFLAGS) -fverbose-asm $< -o $@

%.o: %.S
        $(CC) $(CFLAGS) -c $< -o $@

%.syx: %.hex
        ihex2sysex $< $@

%.srec: %.elf
        $(OBJCOPY) -j .text -j .data -O srec $< $@

%.hex: %.elf
        $(OBJCOPY) -j .text -j .data -O ihex $< $@

%.ee_srec: %.elf
        $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $< $@

AVR_BASE_DIR  ?= $(abspath $(CURDIR)..)
AVR_LIB_DIR   ?= $(AVR_BASE_DIR)/hardware/libraries

AVR_LIBS       += CommonTools Midi
AVR_LIB_DIRS   += $(foreach lib,$(AVR_LIBS),$(AVR_LIB_DIR)/$(lib))
AVR_INC_FLAGS  += $(foreach dir,$(AVR_LIB_DIRS),-I$(dir))
AVR_OBJS       += $(foreach dir,$(AVR_LIB_DIRS),$(foreach file,$(wildcard $(dir)/*.cpp),$(subst .cpp,.o,$(file))))
AVR_OBJS       += $(foreach dir,$(AVR_LIB_DIRS),$(foreach file,$(filter-out $(AVR_Host_EXCLUDE),$(wildcard $(dir)/*.c)),$(subst .c,.o,$(file))))
AVR_DEPS       += $(subst .o,.d,$(AVR_OBJS))

# AVR_Host_EXCLUDE can be used to exclude specific files later on

CXXFLAGS += $(AVR_INC_FLAGS)
CFLAGS += $(AVR_INC_FLAGS)

CXXFlags += -Werror -Wall
CFLAGS += -Werror -Wall

default: all

%.d:%.c
        set -e; $(CC) -MM $(CFLAGS) $< \
        | sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' > $@ ; \
        [ -s $@ ] || rm -f $@

%.d:%.cpp
        set -e; $(CXX) -MM $(CXXFLAGS) $< \
        | sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' > $@ ; \
        [ -s $@ ] || rm -f $@

%.Host.d:%.c
        set -e; $(CC) -MM $(CFLAGS) $< \
        | sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' > $@ ; \
        [ -s $@ ] || rm -f $@

%.Host.d:%.cpp
        set -e; $(CXX) -MM $(CXXFLAGS) $< \
        | sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' > $@ ; \
        [ -s $@ ] || rm -f $@

printlibs:
        echo $(AVR_LIBS)

$(TARGET).elf: $(TARGET).o $(TARGET_OBJS) $(AVR_OBJS)
        $(CXX) $(CLDFLAGS) -g -o $@ $^

_clean:
        - rm *.elf *.hex *.o .midictrl.flags

libclean:
        rm -rf $(TARGET_OBJS) $(OBJS)

# concrete settings for development environment

UNAME=$(Shell uname)
ISWIN=$(findstring CYGWIN,$(UNAME))
ISMAC=$(findstring Darwin,$(UNAME))

CC = avr-gcc
CXX = avr-g++
OBJCOPY = avr-objcopy
AVR_Arch = atmega64
F_CPU = 16000000L
CORE = minicommand2
8
wesen

Vous devez réellement créer un fichier cpp viable à partir de votre croquis Arduino. L'environnement Arduino le fait automatiquement pour vous. Une astuce pour accéder à ces fichiers consiste à ouvrir votre arduino preferences.txt (il se trouve dans ~/Library/Arduino sur le mac, je pense que dans vos documents et paramètres ou données d'application sur Windows, je ne me souviens pas exactement), et définir la construction .verbose = true et upload.verbose = true. Démarrez Arduino et compilez votre croquis (ne le téléchargez pas). La console en bas vous montrera quels fichiers ont été compilés. Vous pouvez maintenant aller dans ce répertoire, qui contiendra le fichier cpp et les fichiers objets compilés pour tous les objets Arduino principaux. Vous pouvez les copier dans votre projet et utiliser le fichier cpp pour continuer le piratage. Faites-moi savoir si vous avez besoin de plus d'informations sur le Makefile, je peux vous fournir celles que j'ai.

5
wesen

Vous pouvez utiliser biicode (c'est un projet dans lequel je travaille) qui est basé sur CMake (mais vous n'avez en fait pas besoin d'écrire de fichier cmake) et est également un outil pour gérer les bibliothèques Arduino

Ses principales caractéristiques sont:

  • Résolution des dépendances, de manière transitoire, comme le fait maven, mais sans fichiers de configuration: lit les dépendances directement à partir du code source.
  • Référentiel central, tout le monde peut télécharger ses bibliothèques. Ils peuvent être explorés, parcourus et découverts sur le web
  • Contrôle de version: il vérifie la compatibilité des versions et permet des mises à jour sûres des dépendances
  • Vous pouvez l'utiliser avec n'importe quel éditeur de texte (il a en option intégration Eclipse )
  • Il gère la configuration et les compilations du projet, clignote le firmware généré sur la carte

Vous pouvez voir une démo rapide ici et en savoir plus dans la documentation .

3
hithwen

Vous pouvez réellement utiliser l'interface graphique arduino pour compiler et télécharger, et définir l'éditeur sur externe dans les préférences. De cette façon, vous pouvez éditer les fichiers C++ (PDE) à partir de xcode, et demander à arduino de générer le CPP réel et de construire tout le Shebang.

Vous pouvez également utiliser XCode pour écrire du C++/C simple pour l'arduino, en utilisant le compilateur avr-gcc.

Jetez un œil à: https://stackoverflow.com/a/8192762/153835

Vous pouvez ensuite utiliser l'outil de téléchargement plain avrdude pour programmer l'arduino. Jetez un œil à: http://www.ladyada.net/library/arduino/bootloader.html

Auparavant, le protocole parlé par Arduino était une modification du protocole STK500, et seul l'avrdude fourni avec Arduino pouvait le parler. Je ne sais pas si l'avrdude grand public a été mis à niveau, ou si vous devez toujours recourir à l'avrdude dans le dossier Arduino.

2
wesen

Si vous pouvez utiliser cmake, il existe des liens sur le même site Web ( this et this par exemple). GNU makefile est un peu différent de cmake mais rien de compliqué. Juste Google un peu et vous pouvez trouver beaucoup d'exemples Makefile comment compiler du code AVR.

2
Cougar

L'équipe Arduino développe un client cli https://github.com/arduino/arduino-cli

Annonce : https://blog.arduino.cc/2018/08/24/announcing-the-arduino-command-line- interface-cli /

    $ arduino-cli Arduino Command Line Interface (arduino-cli).

    Usage:   arduino-cli [command]

    Examples: arduino <command> [flags...]

    Available Commands:
      board         Arduino board commands.
      compile       Compiles Arduino sketches.
      config        Arduino Configuration Commands.
      core          Arduino Core operations.
      help          Help about any command
      lib           Arduino commands about libraries.
      sketch        Arduino CLI Sketch Commands.
      upload        Upload Arduino sketches.
      version       Shows version number of Arduino CLI.
1
Madacol

J'ai un makefile pour Arduino qui peut être utilisé pour compiler et télécharger des programmes Arduino (ou AVR C) sur Arduino.

Voici quelques-unes des caractéristiques importantes de ce makefile

  • Prend en charge le téléchargement via Arduino en tant que FAI ou tout programmeur
  • Prend en charge la compilation de programmes AVR C simples
  • Prend en charge les bibliothèques utilisateur et système.
  • Générer des fichiers d'assemblage et de symboles
  • Programme utilisant un autre noyau Arduino (comme des cœurs alternatifs ATtiny ou Arduino)
1
Sudar

Si vous n'insistez pas sur make, il y a aussi scons/sconstruct scons/sconstruct . Étant donné que cela est essentiellement écrit en Python c'est beaucoup plus simple pour Tweak que pour make. De plus, il peut être débogué avec n'importe quel débogueur Python.

0
Udo Klein