Компиляция и загрузка командной строки 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)
  • он управляет настройкой проекта и компиляциями, мигает сгенерированной прошивкой на плате

вы можете увидеть быстрый демо здесь и прочитайте больше в документация.


Если вы можете использовать cmake, то есть некоторые ссылки в той же сети (этой и этой например). GNU makefile немного отличается от cmake, но ничего сложного. Просто Google немного, и вы можете найти много примеров Makefile, как скомпилировать код AVR.


вы можете использовать графический интерфейс 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.