Pemrograman untuk Arduino tanpa Arduino IDE .. tetapi dengan perpustakaan yang disediakan?

10

Saya baru-baru memulai proyek baru menggunakan Arduino saya yang telah mengumpulkan debu untuk sementara waktu. Seiring dengan papan fisik mengumpulkan debu, begitu juga salinan avr-gcc dan perpustakaan Arduino saya. Saya dapat mengelola pembaruan avr-gcc, tetapi saya tidak ingat bagaimana saya mengkompilasi perpustakaan Arduino. Dengan sumber Arduino, ada daftar file sumber dan semacamnya, tetapi tidak ada makefile (yang bisa saya lihat) untuk benar-benar membangun perpustakaan. Saya tidak peduli tentang membangun IDE, saya hanya ingin perpustakaan dalam format biner dan file header yang saya perlukan. Apakah ada dokumentasi atau semacamnya untuk melakukan ini?

Saya tidak ingin menggunakan Arduino IDE, saya lebih suka menggunakan editor teks saya sendiri dan makefile.

Earlz
sumber
1
Ini mungkin bermanfaat bagi Anda.
arminb
1
@arminb bleaklow.com/2010/06/04/a_makefile_for_arduino_sketches.html akan lebih bermanfaat dari itu. Tautan Anda hanya memberikan cara untuk membuat sketsa dari baris perintah, bukan cara untuk membangun pustaka arduino. Bagaimanapun juga tidak relevan karena saya telah menjawab pertanyaan saya sendiri
Earlz
@ jippie Saya melihat itu (bukan ketika ditanya, tetapi baru-baru ini ketika meninjau kembali ini) tetapi ditunda oleh kenyataan bahwa Anda harus menginstal IDE Arduino. Jenis kekalahan tujuan
Earlz

Jawaban:

9

Saya telah membuat proyek kecil dengan sistem build khusus (menggunakan Ruby) yang membuat ini sangat mudah tanpa harus menginstal IDE Arduino. Pada dasarnya, ia menggunakan templat Makefile, dan skrip ruby ​​untuk membuat kompilasi pustaka Arduino menjadi sangat mudah. Anda dapat melihatnya di https://github.com/Earlz/make-wiring

Namun, saya meninggalkan jawaban lama di sini untuk informasi tentang menggulirkan jawaban Anda sendiri. Ini cukup rumit dan menjengkelkan:

Petunjuk arah:

  1. Unduh salinan kode sumber IDE Arduino
  2. Salin konten hardware/arduino/cores/arduinoke direktori baru yang saya sebut arduino_build
  3. Salin pins_arduino.hfile dari varian Arduino mana pun milik Anda hardware/arduino/variants(centang boards.txt jika Anda tidak yakin) ke arduino_build
  4. Tambahkan makefile ini ke 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

Dan kemudian jalankan

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

Dan kemudian untuk menggunakan perpustakaan yang dikompilasi dan semacamnya, Anda dapat menggunakan makefile sederhana seperti ini:

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

Juga, jika Anda mencoba mengkompilasi perpustakaan di libraries/Anda akan mendapatkan kesalahan linker jika Anda tidak melakukan hal-hal dalam urutan yang benar. Sebagai contoh, saya harus melakukan ini untuk menggunakan 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

Itu -larduinoharus menjadi perpustakaan terakhir di baris perintah

Bagaimanapun, ini adalah cara yang cukup mudah untuk mengkompilasinya untuk saya. Ketika versi masa depan dari Ardunio keluar, makefile ini harus cukup tahan di masa depan, hanya membutuhkan beberapa modifikasi untuk OBJS dan HDRS. Juga, makefile ini harus bekerja dengan BSD make dan GNU make

Lihat juga versi yang sedikit dimodifikasi dari jawaban ini di blog saya dengan biner perpustakaan yang sudah dikompilasi (dikompilasi menggunakan pin_arduino.h "standar").


** EDIT **

Saya menemukan bahwa menambahkan flag pengoptimalan kompiler berikut ke Makefile gedung perpustakaan dan setiap proyek individu Makefile sangat mengurangi ukuran biner akhir yang dikompilasi. Ini membuat ukuran biner akhir sebanding dengan IDE.

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

.

Jadi, untuk perpustakaan build 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

dan, untuk setiap makefile proyek:

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

.

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

Earlz
sumber
3

Jika Anda ingin menggunakan Arduino IDE sekali (atau sekali per jenis perangkat), ini adalah cara termudah untuk membangun pustaka statis, serta mendapatkan sumber pustaka. Setelah itu Anda dapat menggunakan alat pengembangan apa pun yang cocok untuk Anda.

Ini artikel Arduino (ditulis untuk pengguna pindah ke Eclipse IDE) menjelaskan membangun perpustakaan Arduino dengan menyusun sketsa dengan Arduino IDE dan mengambil perpustakaan dari direktori sementara Arduino ini. Gulir ke bawah sekitar 1/4 halaman ke bagian

  1. Menyalin perpustakaan dari proyek IDE Arduino
JRobert
sumber
0

Jika Anda hanya membutuhkan sistem build yang juga dapat mengemudikan programmer mikrokontroler Anda, platformio adalah teman Anda.

Luke Skywalker
sumber