Programowanie dla Arduino bez Arduino IDE .. ale z dostarczonymi bibliotekami?

10

Niedawno rozpocząłem nowy projekt za pomocą mojego Arduino, które od jakiegoś czasu zbiera kurz. Wraz z fizyczną tablicą zbierającą kurz, podobnie jak moja kopia avr-gcc i bibliotek Arduino. Mogę zarządzać aktualizacją avr-gcc, ale nie pamiętam, jak skompilowałem biblioteki Arduino. Ze źródłem Arduino są wymienione pliki źródłowe i takie, ale nie ma pliku makefile (który widzę) do faktycznego zbudowania biblioteki. Nie dbam o zbudowanie IDE, chcę tylko bibliotekę w formacie binarnym i pliki nagłówkowe, których potrzebuję. Czy jest na to jakaś dokumentacja?

Nie chcę używać Arduino IDE, wolę używać własnego edytora tekstu i makefile.

Earlz
źródło
1
To może ci pomóc.
arminb
1
@arminb bleaklow.com/2010/06/04/a_makefile_for_arduino_sketches.html byłby bardziej użyteczny niż to. Twój link pozwala tylko na tworzenie szkiców z wiersza poleceń, a nie na sposób tworzenia biblioteki arduino. Nieistotne w obu przypadkach, ponieważ odpowiedziałem na własne pytanie
Earlz
@jippie Spojrzałem na to (nie kiedy o to pytałem, ale ostatnio, kiedy ponownie to odwiedziłem), ale zniechęciło mnie to, że musisz mieć zainstalowany Arduino IDE. Rodzaj pokonuje cel
Earlz

Odpowiedzi:

9

Stworzyłem mały projekt z niestandardowym systemem kompilacji (używając Ruby), który sprawia, że ​​jest to dość łatwe bez konieczności instalowania Arduino IDE. Zasadniczo wykorzystuje szablon Makefile i skrypt ruby, aby kompilacja bibliotek Arduino była wyjątkowo łatwa. Możesz to zobaczyć na https://github.com/Earlz/make-wiring

Pozostawiam jednak starą odpowiedź tutaj, aby uzyskać informacje na temat rozwijania własnej. Jest to jednak dość kłopotliwe i denerwujące:

Kierunki:

  1. Pobierz kopię kodu źródłowego Arduino IDE
  2. Skopiuj zawartość hardware/arduino/cores/arduinodo nowego katalogu, który będę określał jako arduino_build
  3. Skopiuj pins_arduino.hplik z dowolnego wariantu Arduino z twojego hardware/arduino/variants(sprawdź deski.txt, jeśli nie jesteś pewien) do arduino_build
  4. Dodaj ten plik makefile do 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

A potem po prostu biegnij

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

A potem, aby skorzystać ze skompilowanych bibliotek, możesz użyć prostego makefile takiego jak ten:

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

Ponadto, jeśli spróbujesz skompilować biblioteki libraries/, pojawi się błąd linkera, jeśli nie zrobisz rzeczy we właściwej kolejności. Na przykład musiałem to zrobić, aby użyć 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

-larduinoMusi być ostatnim biblioteki w wierszu poleceń

W każdym razie był to dla mnie dość łatwy sposób. Gdy pojawią się przyszłe wersje Ardunio, ten plik makefile powinien być dość przyszłościowy, wymagając tylko kilku modyfikacji OBJS i HDRS. Ponadto ten plik makefile powinien współpracować zarówno z marką BSD, jak i GNU

Zobacz także nieco zmodyfikowaną wersję tej odpowiedzi na moim blogu z już skompilowanym plikiem binarnym biblioteki (skompilowanym przy użyciu „standardowego” pliku pin_arduino.h).


** EDYCJA **

Odkryłem, że dodanie następujących flag optymalizacji kompilatora zarówno do pliku Makefile budującego bibliotekę, jak i do każdego pliku Makefile projektu znacznie zmniejsza rozmiar końcowego skompilowanego pliku binarnego. To sprawia, że ​​końcowy rozmiar binarny jest porównywalny z rozmiarem IDE.

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

.

Zatem dla makefile kompilacji biblioteki:

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

oraz dla każdego makefile projektu:

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

.

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

Earlz
źródło
3

Jeśli chcesz użyć Arduino IDE raz (lub raz na urządzenie), jest to najprostszy sposób na zbudowanie biblioteki statycznej, a także uzyskanie źródeł biblioteki. Następnie możesz użyć dowolnych narzędzi programistycznych, które Ci odpowiadają.

W tym artykule Arduino (napisanym dla użytkowników przechodzących do środowiska Eclipse IDE) opisano budowanie biblioteki Arduino poprzez skompilowanie szkicu z Arduino IDE i pobranie biblioteki z tymczasowego katalogu Arduino. Przewiń w dół około 1/4 strony do sekcji

  1. Kopiowanie biblioteki z projektu Arduino IDE
JRobert
źródło
0

Jeśli potrzebujesz tylko systemu kompilacji, który może również pilotować programator mikrokontrolera, platformio jest Twoim przyjacielem.

Luke Skywalker
źródło