Я бы предложил поиск в Google для проектов Makefile. Я сделал это некоторое время назад для программы Blink, в основном, наблюдая за тем, что было сгенерировано IDE, и копируя это в более общем виде.
#
# Simple Arduino Makefile
#
# Author: Nick Gammon
# Date: 18th March 2015
# where you installed the Arduino app
ARDUINO_DIR = C:/Documents and Settings/Nick/Desktop/arduino-1.0.6/
# various programs
CC = "$(ARDUINO_DIR)hardware/tools/avr/bin/avr-gcc"
CPP = "$(ARDUINO_DIR)hardware/tools/avr/bin/avr-g++"
AR = "$(ARDUINO_DIR)hardware/tools/avr/bin/avr-ar"
OBJ_COPY = "$(ARDUINO_DIR)hardware/tools/avr/bin/avr-objcopy"
MAIN_SKETCH = Blink.cpp
# compile flags for g++ and gcc
# may need to change these
F_CPU = 16000000
MCU = atmega328p
# compile flags
GENERAL_FLAGS = -c -g -Os -Wall -ffunction-sections -fdata-sections -mmcu=$(MCU) -DF_CPU=$(F_CPU)L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=106
CPP_FLAGS = $(GENERAL_FLAGS) -fno-exceptions
CC_FLAGS = $(GENERAL_FLAGS)
# location of include files
INCLUDE_FILES = "-I$(ARDUINO_DIR)hardware/arduino/cores/arduino" "-I$(ARDUINO_DIR)hardware/arduino/variants/standard"
# library sources
LIBRARY_DIR = "$(ARDUINO_DIR)hardware/arduino/cores/arduino/"
build:
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(MAIN_SKETCH) -o $(MAIN_SKETCH).o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)avr-libc/malloc.c -o malloc.c.o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)avr-libc/realloc.c -o realloc.c.o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)WInterrupts.c -o WInterrupts.c.o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)wiring.c -o wiring.c.o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)wiring_analog.c -o wiring_analog.c.o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)wiring_digital.c -o wiring_digital.c.o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)wiring_pulse.c -o wiring_pulse.c.o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)wiring_shift.c -o wiring_shift.c.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)CDC.cpp -o CDC.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)HardwareSerial.cpp -o HardwareSerial.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)HID.cpp -o HID.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)IPAddress.cpp -o IPAddress.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)main.cpp -o main.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)new.cpp -o new.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)Print.cpp -o Print.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)Stream.cpp -o Stream.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)Tone.cpp -o Tone.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)USBCore.cpp -o USBCore.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)WMath.cpp -o WMath.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)WString.cpp -o WString.cpp.o
rm core.a
$(AR) rcs core.a malloc.c.o
$(AR) rcs core.a realloc.c.o
$(AR) rcs core.a WInterrupts.c.o
$(AR) rcs core.a wiring.c.o
$(AR) rcs core.a wiring_analog.c.o
$(AR) rcs core.a wiring_digital.c.o
$(AR) rcs core.a wiring_pulse.c.o
$(AR) rcs core.a wiring_shift.c.o
$(AR) rcs core.a CDC.cpp.o
$(AR) rcs core.a HardwareSerial.cpp.o
$(AR) rcs core.a HID.cpp.o
$(AR) rcs core.a IPAddress.cpp.o
$(AR) rcs core.a main.cpp.o
$(AR) rcs core.a new.cpp.o
$(AR) rcs core.a Print.cpp.o
$(AR) rcs core.a Stream.cpp.o
$(AR) rcs core.a Tone.cpp.o
$(AR) rcs core.a USBCore.cpp.o
$(AR) rcs core.a WMath.cpp.o
$(AR) rcs core.a WString.cpp.o
$(CC) -Os -Wl,--gc-sections -mmcu=$(MCU) -o $(MAIN_SKETCH).elf $(MAIN_SKETCH).o core.a -lm
$(OBJ_COPY) -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 $(MAIN_SKETCH).elf $(MAIN_SKETCH).eep
$(OBJ_COPY) -O ihex -R .eeprom $(MAIN_SKETCH).elf $(MAIN_SKETCH).hex
Вам нужно будет ARDUINO_DIR
как минимум изменить , чтобы отразить, где вы установили IDE. Если вы используете другие вещи, такие как библиотека Wire, вам нужно несколько расширить ее для компиляции дополнительных библиотек. Опять же, вы можете использовать то, что сама IDE генерирует для управления вашими изменениями.
Строки с ведущими пробелами выше будут нуждаться в символе табуляции вместо пробелов, как обычно для Makefile.
Я использую интерфейс командной строки для
arduino
команды .Я запускаю это так:
Есть страница, которая описывает другие инструменты командной строки, например
inotool
. На этой странице также есть примерMakefile
. Эти альтернативы кажутся заманчивыми, но, по-видимому, на момент написания этой статьи ни один из них не работал. Я предполагаю, что это связано с некоторыми недавними изменениями в дистрибутивных файлах Arduino IDE, от которых они зависят.Запуск,
arduino
как описано выше, немного медленный, потому что он должен загружать Java, но, по крайней мере, он работает. Существует такжеarduino-builder
команда, поставляемая с дистрибутивом Arduino IDE. На момент написания статьи это было недостаточно хорошо задокументировано, чтобы я мог понять, как его использовать. Например, нет примеров командных строк в README или в каких-либо уроках, с которыми я сталкивался, и я не мог понять, как использовать их для загрузки кода на доску. Тем не менее, по-видимому, это может дать нам более быструю компиляцию, чемarduino
. В README также упоминается возможность многократного использования объектных файлов из предыдущей компиляции, поэтому есть некоторая функциональность, похожая на make.Для просмотра последовательного вывода я использую что-то вроде
Число 1000000 должно совпадать с номером, который вы передаете
Serial.begin()
в коде вашей доски. Вы такжеscreen
можете использовать эту программу, если у вас есть интерактивная программа, или вы можете использовать любую утилиту для прямой записи на устройство. Кстати, мой Due показывается как/dev/ttyACM0
(а не/dev/ttyUSB0
для Uno).источник
*.ino
файл в каталоге, поскольку он не обязательно загружает файл, указанный в--upload
параметре.Что вам нужно, это Makefile. Есть несколько проектов Makefile для Arduino. Поиск в Google для Arduino Makefile возвращает много результатов, включая то, что на Github выглядит как хороший: https://github.com/sudar/Arduino-Makefile
Компиляция из командной строки не тривиальна из-за того, как Arduino IDE обрабатывает библиотеки.
Для серийного монитора я бы порекомендовал миником. Это полнофункциональный эмулятор терминала (vt102) в командной строке.
... например.
источник
Если вы хотите полностью совместимое решение для вашего проекта Arduino (да, вы можете поделиться своим проектом с другими людьми, которые используют просто Arduino IDE), вам нужно проверить инструмент amake , чтобы упростить Cli Arduino, я использую его с Geany, но другие используют его с vi, Atom и т. д.
Это вдохновило и теперь мертвые проекты Ino и Arturo; пожалуйста, потратьте 5 минут, чтобы протестировать его, и, пожалуйста, оставьте отзыв.
Пример использования:
Там есть какой-то умный клей, он может запоминать доску и файл и даже автоматически определять usb платы; поэтому после успешной команды "amake -v" вы можете сделать это в командной строке, и она будет работать.
Если вы используете некоторые макросы IDE, вы можете легко создавать команды компиляции и выгрузки, например, используя Geany IDE, это станет:
Вы можете получить дополнительную помощь, запустив «amake» или «amake -h» после установки.
Кроме того, он может поддерживать КАЖДУЮ плату / lib / programmer, которую вы установили / настроили в Arduino IDE, да, такую современную плату, как Adafuit Trinket M0 / Arduino M0 и т. Д. ...
Просто запустите вашу Arduino IDE, перейдите к администратору конференции, установите поддержку и все, просто следуйте простым инструкциям и все готово.
Доска у вас не поддерживается? не проблема, определите fqbn (прочитайте файл README.md) и передайте его как имя платы.
Я ищу тестеров для увеличения числа или псевдонимов платы и автоматического определения правильных сигнатур USB.
Помните, что это частный инструмент, которым теперь обмениваются с публикой, вы знаете, просто программист, который чешется ...
Приветствия.
источник
Официальный инструмент CLI
Команда Arduino разрабатывает клиент Cli. Https://github.com/arduino/arduino-cli.
Объявление : https://blog.arduino.cc/2018/08/24/announcing-the-arduino-command-line-interface-cli/
С этим вы можете делать практически все: от загрузки досок и библиотек до компиляции и загрузки скриптов. Что отсутствует является частью мониторинга (вы можете использовать метод метаморфических в использовании
stty
cat
, оно работает!)Команды очень похожи на ответ Metamorphic, так как этот инструмент выходит из этого
Инструкции в репозитории Github и на странице руководства:
источник