web-dev-qa-db-ja.com

コマンドラインArduinoのコンパイルとアップロード?

MacおよびLinuxでコマンドラインからArduino sketches をコンパイルしてアップロードするにはどうすればよいですか? Arduinoプログラミング環境をインストールしました。サンプルmakefileはどこかにありますか?

39
Mark Harrison

コマンドライン(Windows、Mac、およびLinux)でのスケッチのコンパイルおよびアップロード(C/C++ソースと同じ)は、1.5.0以降、arduino実行可能ファイルへのフラグを介して直接サポートされています。

Inoはarduino --upload [sketch.ino]でコンパイルおよびアップロードできます

ドキュメント

13
user1823664

Ino という名前のコマンドラインArduinoツールキットがあります。それだけです。

39
nkrkv

これは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
8
wesen

実際に、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についてさらに情報が必要な場合は、私に教えてください。

5
wesen

biicode (これは私が取り組んでいるプロジェクトです)を使用できます。これはCMakeに基づいており(実際にはcmakeファイルを作成する必要はありません)、Arduinoライブラリを管理するツールでもあります

主な機能は次のとおりです。

  • 依存関係の解決、mavenのように推移的に、ただし構成ファイルなし:ソースコードから直接依存関係を読み取ります。
  • 中央リポジトリ。誰でもライブラリをアップロードできます。それらを探索し、ナビゲートし、 ウェブで発見
  • バージョン管理:バージョンの互換性をチェックし、依存関係の安全な更新を許可します
  • 任意のテキストエディターで使用できます(オプションの Eclipse統合 があります)
  • プロジェクトのセットアップとコンパイルを管理し、生成されたファームウェアをボードにフラッシュします

クイックデモ こちら をご覧ください。詳細は ドキュメント をご覧ください。

3
hithwen

実際には、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に頼らなければならないかどうかはわかりません。

2
wesen

Cmakeを使用できる場合、同じWebにいくつかのリンクがあります( this および this など)。 GNU makefileはcmakeとは少し異なりますが、複雑なことはありません。Googleを少しだけ使用すると、AVRコードをコンパイルするMakefileの例がたくさん見つかります。

2
Cougar

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
Madacol

Arduinoのメイクファイル があり、Arduino(またはプレーンAVR C)プログラムをコンパイルしてArduinoにアップロードするために使用できます。

以下は、このメイクファイルの重要な機能の一部です。

  • Arduinoを介したISPまたはプログラマとしてのアップロードをサポート
  • プレーンAVR Cプログラムのコンパイルをサポート
  • ユーザーおよびシステムライブラリをサポートします。
  • アセンブリおよびシンボルファイルを生成する
  • 代替Arduinoコアを使用するプログラム(ATtinyまたはArduino代替コアなど)
1
Sudar

Makeを要求しない場合は、scons/sconstruct scons/sconstruct もあります。これは基本的にPythonで書かれているので、makeよりもTweakの方がはるかに簡単です。さらに、任意のPythonデバッガでデバッグできます。

0
Udo Klein