Arduino IDEなしでArduinoのプログラミングを行いますが、提供されているライブラリを使用していますか?


10

私は最近、しばらくダストを集めていた私のArduinoを使用して新しいプロジェクトを開始しました。ほこりを集める物理的なボードに加えて、私のavr-gccとArduinoライブラリのコピーもそうです。avr-gccの更新は管理できますが、Arduinoライブラリをコンパイルした方法を思い出せません。Arduinoソースには、ソースファイルなどがリストされていますが、実際にライブラリをビルドするためのmakefile(私が見ることができる)はありません。IDEのビルドは気にしません。バイナリ形式のライブラリと必要なヘッダーファイルだけが必要です。これを行うためのドキュメントなどはありますか?

私はArduino IDEを使いたくありません。自分のテキストエディターとmakefileを使うことを好みます。


1
これはあなたに役立つかもしれません。
arminb 2012年

1
@arminb bleaklow.com/2010/06/04/a_makefile_for_arduino_sketches.htmlはそれよりも便利です。リンクは、コマンドラインからスケッチを構築する方法を提供するだけであり、arduinoライブラリを構築する方法を提供しません。私自身の質問に答えたのでどちらにしても関係ありません
Earlz


@jippie私はそれを見ました(尋ねられたときではなく、最近これを再検討したとき)が、Arduino IDEがインストールされている必要があるという事実によって延期されました。一種の目的を打ち破る
Earlz

回答:


9

Arduino IDEをインストールせずにこれをかなり簡単にするカスタムビルドシステム(Rubyを使用)で小さなプロジェクトを作成しました。基本的に、テンプレートのMakefileとRubyスクリプトを使用して、Arduinoライブラリのコンパイルを非常に簡単にします。あなたはhttps://github.com/Earlz/make-wiringでそれを見ることができます

しかし、私はあなた自身のローリングについての情報のためにここに古い答えを残しておきます。しかし、それはかなり面倒で迷惑です:

行き方:

  1. Arduino IDEソースコードのコピーをダウンロードする
  2. の内容hardware/arduino/cores/arduinoを、arduino_buildと呼ぶ新しいディレクトリにコピーします。
  3. pins_arduino.hArduinoの亜種のいずれかからファイルhardware/arduino/variants(不明な場合はboards.txtを確認)をarduino_buildにコピーします
  4. このメイクファイルをarduino_buildに追加します。

#BSD licensed, see http://lastyearswishes.com/static/Makefile for full license

HDRS = Arduino.h binary.h Client.h HardwareSerial.h IPAddress.h new.h pins_arduino.h Platform.h Printable.h Print.h \
    Server.h Stream.h Udp.h USBAPI.h USBCore.h USBDesc.h WCharacter.h wiring_private.h WString.h


OBJS = WInterrupts.o wiring_analog.o wiring.o wiring_digital.o wiring_pulse.o wiring_shift.o CDC.o HardwareSerial.o \
    HID.o IPAddress.o main.o new.o Print.o Stream.o Tone.o USBCore.o WMath.o WString.o

#may need to adjust -mmcu if you have an older atmega168
#may also need to adjust F_CPU if your clock isn't set to 16Mhz
CFLAGS = -I./ -std=gnu99  -DF_CPU=16000000UL -Os -mmcu=atmega328p
CPPFLAGS = -I./ -DF_CPU=16000000UL -Os -mmcu=atmega328p

CC=avr-gcc
CPP=avr-g++
AR=avr-ar


default: libarduino.a

libarduino.a:   ${OBJS}
    ${AR} crs libarduino.a $(OBJS)

.c.o: ${HDRS}
    ${CC} ${CFLAGS} -c $*.c

.cpp.o: ${HDRS}
    ${CPP} ${CPPFLAGS} -c $*.cpp

clean:
    rm -f ${OBJS} core a.out errs

install: libarduino.a
    mkdir -p ${PREFIX}/lib
    mkdir -p ${PREFIX}/include
    cp *.h ${PREFIX}/include
    cp *.a ${PREFIX}/lib

そして、ただ走る

make
make install PREFIX=/usr/arduino (or whatever)

そして、コンパイルされたライブラリなどを利用するには、次のような単純なmakefileを使用できます。

default:
    avr-g++ -L/usr/arduino/lib -I/usr/arduino/include -Wall -DF_CPU=16000000UL -Os -mmcu=atmega328p -o main.elf main.c -larduino
    avr-objcopy -O ihex -R .eeprom main.elf out.hex
upload:
    avrdude -c arduino -p m328p -b 57600 -P /dev/ttyUSB0 -U flash:w:out.hex

all: default upload

また、ライブラリをコンパイルしようとするlibraries/と、正しい順序で実行しないと、リンカエラーが発生します。たとえば、SoftwareSerialを使用するには次のようにする必要があります。

    avr-g++ -L/usr/arduino/lib -I/usr/arduino/include -Wall -DF_CPU=16000000UL -Os -mmcu=atmega328p -o main.elf main.c -lSoftwareSerial -larduino

-larduinoコマンドラインの最後のライブラリである必要があります

とにかく、これは私にとってそれをコンパイルするためのかなり簡単な方法でした。Ardunioの将来のバージョンが出てくるので、このメイクファイルはかなり将来に対応する必要があり、OBJSとHDRSにいくつかの変更を加えるだけで済みます。また、このmakefileはBSD makeとGNU makeの両方で機能するはずです。

ライブラリのバイナリ既にコンパイルされている(「標準」pins_arduino.hを使用してコンパイルされた)ブログで、この回答のわずかに変更されたバージョンも参照してください。


** 編集 **

次のコンパイラ最適化フラグをライブラリ構築用Makefileと個々のプロジェクトMakefileの両方に追加すると、最終的にコンパイルされるバイナリのサイズが大幅に減少することがわかりました。これにより、最終的なバイナリサイズはIDEのそれに匹敵します。

-Wl,--gc-sections -ffunction-sections  -fdata-sections  

したがって、ライブラリビルドmakefileの場合:

CFLAGS = -I./ -std=gnu99  -DF_CPU=16000000UL -Os -Wl,--gc-sections -ffunction-sections  -fdata-sections -mmcu=atmega328p
CPPFLAGS = -I./ -DF_CPU=16000000UL -Os -Wl,--gc-sections -ffunction-sections  -fdata-sections -mmcu=atmega328p

そして、プロジェクトのメイクファイルごとに:

avr-g++ -L/usr/arduino/lib -I/usr/arduino/include -Wall -DF_CPU=16000000UL -Os -Wl,--gc-sections -ffunction-sections  -fdata-sections -mmcu=atmega328p -o main.elf main.c -larduino

参照:http : //arduino.cc/forum/index.php?topic=153186.0


3

Arduino IDEを1回(またはデバイスタイプごとに1回)使用する場合は、静的ライブラリを構築し、ライブラリソースを取得する最も簡単な方法です。その後、自分に合った開発ツールを使用できます。

このArduinoの記事(Eclipse IDEに移行するユーザー向けに書かれています)は、Arduino IDEでスケッチをコンパイルしてArduinoライブラリを構築し、Arduinoの一時ディレクトリからライブラリを取得する方法を説明しています。ページの約1/4までセクションまでスクロールします。

  1. Arduino IDEプロジェクトからライブラリをコピーする

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.