MacおよびLinuxでコマンドラインからArduino sketches をコンパイルしてアップロードするにはどうすればよいですか? Arduinoプログラミング環境をインストールしました。サンプルmakefileはどこかにありますか?
コマンドライン(Windows、Mac、およびLinux)でのスケッチのコンパイルおよびアップロード(C/C++ソースと同じ)は、1.5.0以降、arduino実行可能ファイルへのフラグを介して直接サポートされています。
Inoはarduino --upload [sketch.ino]
でコンパイルおよびアップロードできます
Ino という名前のコマンドラインArduinoツールキットがあります。それだけです。
これはAVRプロジェクトに含める私の定型的なgnu makeです。環境に合わせてその一部を調整する必要があるかもしれません。依存関係を作成し、便利なまたはサイズを最適化する標準gccオプションのホストと、使用するライブラリディレクトリを備えています。これを使用してarduinoソフトウェアを正常にコンパイルしました。また、以前にarduinoエディターでPdePreprocessorをハッキングしてコマンドラインから実行し、すべてのブードゥーを生成しました。
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
実際に、arduinoスケッチから実行可能なcppファイルを作成する必要があります。 arduino環境は自動的にそれを行います。これらのファイルを取得するための1つのトリックは、arduinoのpreferences.txtを開き(Macの〜/ Library/Arduinoにあり、WindowsのDocuments and SettingsまたはApplication Dataにあると思いますが、正確に覚えていない)、ビルドを設定することです.verbose = trueおよびupload.verbose = true。 arduinoを起動し、スケッチをコンパイルします(アップロードしないでください)。下部のコンソールには、コンパイルされたファイルが表示されます。これで、そのディレクトリに移動できます。このディレクトリには、cppファイルと、すべてのコアArduinoオブジェクトのコンパイル済みオブジェクトファイルが含まれます。これらをプロジェクトにコピーし、cppファイルを使用してさらにハッキングを行うことができます。 Makefileについてさらに情報が必要な場合は、私に教えてください。
biicode (これは私が取り組んでいるプロジェクトです)を使用できます。これはCMakeに基づいており(実際にはcmakeファイルを作成する必要はありません)、Arduinoライブラリを管理するツールでもあります
主な機能は次のとおりです。
実際には、arduino GUIを使用してコンパイルおよびアップロードし、設定でエディターを外部に設定できます。そのようにして、xcodeからC++(PDE)ファイルを編集し、arduinoに実際のCPPを生成させ、Shebang全体を構築させることができます。
XCodeを使用して、avr-gccコンパイラーを使用して、arduinoのプレーンなC++/Cを作成することもできます。
ご覧ください: https://stackoverflow.com/a/8192762/153835
その後、プレーンなavrdudeアップロードツールを使用して、arduinoをプログラムできます。ご覧ください: http://www.ladyada.net/library/arduino/bootloader.html
以前は、Arduinoが話すプロトコルはSTK500プロトコルの修正であり、arduinoにバンドルされたavrdudeのみがそれを話すことができました。主流のavrdudeがアップグレードされたかどうか、またはArduinoフォルダー内のavrdudeに頼らなければならないかどうかはわかりません。
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.
Arduinoのメイクファイル があり、Arduino(またはプレーンAVR C)プログラムをコンパイルしてArduinoにアップロードするために使用できます。
以下は、このメイクファイルの重要な機能の一部です。
Makeを要求しない場合は、scons/sconstruct scons/sconstruct もあります。これは基本的にPythonで書かれているので、makeよりもTweakの方がはるかに簡単です。さらに、任意のPythonデバッガでデバッグできます。