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?
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]
Il existe une boîte à outils Arduino en ligne de commande nommée Ino . Il fait juste ça.
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
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.
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:
Vous pouvez voir une démo rapide ici et en savoir plus dans la documentation .
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.
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.
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
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.