Компиляция и загрузка командной строки Arduino?
как скомпилировать и загрузить Arduino эскизы из командной строки на Mac и Linux? Я установил среду программирования Arduino. Есть ли где-нибудь примеры makefiles?
9 ответов
компиляция и загрузка эскизов (как указано в источниках C / C++) в командной строке (в Windows, Mac и Linux) поддерживается непосредственно через флаги в исполняемый файл arduino с 1.5.0.
ino можно скомпилировать и загрузить с помощью arduino --upload [sketch.ino]
существует набор инструментов Arduino командной строки с именем Ino. Он просто делает это.
Это мой шаблон gnu make include для проектов AVR, вам может потребоваться адаптировать некоторые из них в соответствии с вашей средой. Он создает зависимости, имеет множество стандартных опций gcc, которые я считаю полезными или которые оптимизируют для размера, а также библиотеку dir, которую я использую. Я использовал это успешно для компиляции программного обеспечения arduino, я также ранее взломал PdePreprocessor в Редакторе arduino для запуска из командной строки для генерации всех вуду:
https://github.com/wesen/mididuino/blob/master/app/src/processing/app/preproc/PdePreprocessor.java
#
# generic AVR makefile
#
# (c) July 2011 - Manuel Odendahl - wesen@ruinwesen.com
#
# 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,-adhlns=$@.lst
%.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[ :]*,.o $@ : ,g' > $@ ; \
[ -s $@ ] || rm -f $@
%.d:%.cpp
set -e; $(CXX) -MM $(CXXFLAGS) $< \
| sed 's,\($*\)\.o[ :]*,.o $@ : ,g' > $@ ; \
[ -s $@ ] || rm -f $@
%.host.d:%.c
set -e; $(CC) -MM $(CFLAGS) $< \
| sed 's,\($*\)\.o[ :]*,.o $@ : ,g' > $@ ; \
[ -s $@ ] || rm -f $@
%.host.d:%.cpp
set -e; $(CXX) -MM $(CXXFLAGS) $< \
| sed 's,\($*\)\.o[ :]*,.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
вам нужно фактически создать жизнеспособный cpp-файл из вашего эскиза arduino. Среда arduino делает это для вас автоматически. Один трюк, чтобы добраться до этих файлов, - открыть настройки arduino.txt (он находится в ~ / Library / Arduino на mac, я думаю, в ваших документах и настройках или данных приложения в windows, не помню точно) и установить сборку.параметр verbose=true и загрузить.многословный=правда. Запустите arduino и скомпилируйте свой эскиз (не загружайте его). Консоль внизу покажет вам какие файлы были скомпилированы. Теперь вы можете перейти в этот каталог, который будет содержать cpp-файл и скомпилированные объектные файлы для всех основных объектов arduino. Вы можете скопировать их в свой проект и использовать файл cpp для дальнейшего взлома. Дайте мне знать, если вам нужна дополнительная информация о вашем файле Makefile, я могу предоставить вам я.
можно использовать biicode (это проект, в котором я работаю), который основан на CMake (но на самом деле вам не нужно писать файл cmake), а также является инструментом для управления библиотеками Arduino
основные задачи:
- разрешение зависимостей, транзитивно, как maven, но без файлов конфигурации: считывает зависимости непосредственно из исходного кода.
- центральный репозиторий, любой может загрузить свои библиотеки. Они могут быть изучены, навигация и обнаружен на сайте
- контроль версий: он проверяет совместимость версий и позволяет безопасно обновлять зависимости
- вы можете использовать его с любым текстовым редактором (он имеет необязательный интеграция eclipse)
- он управляет настройкой проекта и компиляциями, мигает сгенерированной прошивкой на плате
вы можете увидеть быстрый демо здесь и прочитайте больше в документация.
вы можете использовать графический интерфейс arduino для компиляции и загрузки, а также установить внешний редактор в настройках. Таким образом, вы можете редактировать файлы C++ (PDE) из xcode, а arduino генерировать фактический CPP и создавать весь shebang.
вы также можете использовать XCode для записи простого C++ / C для arduino, используя компилятор avr-gcc.
посмотрите на:https://stackoverflow.com/a/8192762/153835
затем вы можете использовать простой avrdude в загрузить инструмент для программирования arduino. Взгляните на: http://www.ladyada.net/library/arduino/bootloader.html
раньше протокол, на котором говорил Arduino, был модификацией протокола STK500, и только avrdude в комплекте с arduino мог говорить на нем. Я не знаю, был ли обновлен основной avrdude или вам все еще нужно прибегнуть к avrdude внутри папки Arduino.
У меня есть makefile для Arduino который можно использовать для компиляции и загрузки программ Arduino (или plain AVR C) в Arduino.
Ниже приведены некоторые из важных особенностей этого makefile
- поддерживает загрузку через Arduino как ISP или любой программист
- поддерживает компиляцию простых программ AVR C
- поддерживает пользователя, а также системные библиотеки.
- создание файлов сборки и символов
Если вы не настаиваете на том, чтобы сделать есть также scons / sconstruct scons / sconstruct. Поскольку это в основном написано на языке Python гораздо проще настроить, чем сделать. Кроме того, он может быть отлажен с любым отладчиком Python.