Командная строка Arduino компиляции и загрузки? - PullRequest
38 голосов
/ 19 ноября 2011

Как мне скомпилировать и загрузить Arduino наброски из командной строки на Mac и Linux? Я установил среду программирования Arduino. Где-нибудь есть образцы make-файлов?

Ответы [ 10 ]

39 голосов
/ 29 февраля 2012

Существует набор инструментов Arduino для командной строки с именем Ino . Это просто делает это.

13 голосов
/ 12 мая 2015

Компиляция и выгрузка эскизов (в отличие от источников C / C ++) в командной строке (в Windows, Mac и Linux) поддерживается напрямую через флаги в исполняемый файл arduino начиная с 1.5.0.

AnИно может быть скомпилировано и загружено с arduino --upload [sketch.ino]

Документация

8 голосов
/ 13 января 2012

Это мое стандартное включение gnu для проектов 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[ :]*,\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
5 голосов
/ 19 ноября 2011

Вам нужно создать жизнеспособный файл cpp из своего эскиза arduino.Среда Arduino сделает это автоматически.Один из способов получить доступ к этим файлам - открыть файл arduino preferences.txt (он находится в ~ / Library / Arduino на компьютере Mac, я думаю, что в ваших Документах и ​​настройках или Данные приложения в Windows, точно не помню) и установить сборку..verbose = true и upload.verbose = true.Запустите Arduino и скомпилируйте ваш эскиз (не загружайте его).Консоль внизу покажет вам, какие файлы были скомпилированы.Теперь вы можете перейти в этот каталог, который будет содержать файл cpp и скомпилированные объектные файлы для всех основных объектов arduino.Вы можете скопировать их в свой проект и использовать файл cpp для дальнейшего взлома.Дайте мне знать, если вам нужна дополнительная информация о Makefile, я могу предоставить вам те, которые у меня есть.

3 голосов
/ 25 апреля 2014

Вы можете использовать biicode (это проект, в котором я работаю), который основан на CMake (но на самом деле вам не нужно писать какой-либо файл cmake), а также является инструментом для управления Arduino.библиотеки

Основные функции:

  • Разрешение зависимостей, транзитивно, как это делает maven, но без файлов конфигурации: считывает зависимости напрямую из исходного кода.
  • Центральный репозиторийКаждый может загрузить свои библиотеки.Их можно исследовать, перемещать и обнаруживать в Интернете
  • Контроль версий: он проверяет совместимость версий и позволяет безопасно обновлять зависимости
  • Вы можете использовать его с любым текстовым редактором(имеет опциональную интеграцию затмений )
  • Управляет настройкой проекта и компиляциями, мигает сгенерированную прошивку на плату

Вы можете увидеть быстрое демо здесь и подробнее в документации .

2 голосов
/ 12 января 2012

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

2 голосов
/ 19 ноября 2011

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

1 голос
/ 23 апреля 2019

Команда Arduino разрабатывает cli клиента https://github.com/arduino/arduino-cli

Объявление : 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 голос
/ 27 июня 2013

У меня есть make-файл для Arduino , который можно использовать для компиляции и загрузки программ Arduino (или обычного AVR C) в Arduino.

Ниже приведены некоторые важные функции этого make-файла

.
  • Поддерживает загрузку через Arduino как ISP или любого программиста
  • Поддерживает компиляцию простых программ AVR C
  • Поддерживает как пользовательские, так и системные библиотеки.
  • Создание файлов сборки и символов
  • Программа с использованием альтернативного ядра Arduino (например, альтернативных ядер ATtiny или Arduino)
0 голосов
/ 27 мая 2013

Если вы не настаиваете на изготовлении, есть также scons / sconstruct scons / sconstruct .Так как это в основном написано на Python, его гораздо проще настроить, чем сделать.Кроме того, его можно отлаживать с помощью любого отладчика Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...