Програмування для Arduino без Arduino IDE .. але з наданими бібліотеками?


10

Нещодавно я розпочав новий проект, використовуючи Arduino, який певний час збирав пил. Поряд із фізичною дошкою, що збирає пил, також є моя копія avr-gcc та бібліотеки Arduino. Я можу керувати оновленням avr-gcc, але не можу згадати, як я компілював бібліотеки Arduino. З джерелом Arduino є перелічені вихідні файли та такі, але ніякого makefile (що я бачу) для фактичної побудови бібліотеки. Мені не важливо будувати IDE, я просто хочу, щоб бібліотека була у двійковому форматі та файли заголовків, які мені знадобляться. Чи є якась документація чи така для цього?

Я не хочу використовувати ID Arduino IDE, я вважаю за краще використовувати власний текстовий редактор та makefile.


1
Це може бути для вас корисним.
армінб

1
@arminb bleaklow.com/2010/06/04/a_makefile_for_arduino_sketches.html було б корисніше за це. Ваше посилання просто дає спосіб побудувати ескізи з командного рядка, а не спосіб побудувати бібліотеку arduino. Неважливо, в будь-якому випадку, тому що я відповів на власне запитання
Earlz


@jippie Я дивився на це (не коли мене запитували, а нещодавно, коли переглядав це), але був відкладений тим, що у вас повинен бути встановлений Arduino IDE. Види поразок мети
граф

Відповіді:


9

Я створив невеликий проект із спеціальною системою збірки (використовуючи Ruby), що робить це досить просто, не встановлюючи Arduino IDE. В основному він використовує шаблон Makefile і сценарій рубіну, щоб зробити компіляцію бібліотек Arduino надзвичайно просто. Ви можете побачити це на https://github.com/Earlz/make-wiring

Однак я залишаю тут стару відповідь, щоб отримати інформацію про те, як прокрутити свій власний. Це досить громіздко і дратує:

Напрямки:

  1. Завантажте копію вихідного коду Ardeino IDE
  2. Скопіюйте вміст у hardware/arduino/cores/arduinoновий каталог, який я буду називати arduino_build
  3. Скопіюйте pins_arduino.hфайл із будь-якого варіанта Arduino hardware/arduino/variants(перевірте Board.txt, якщо ви не впевнені) на arduino_build
  4. Додайте цей makefile до 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 цей makefile повинен бути досить надійним, вимагаючи лише декількох модифікацій 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 один раз (або один раз на тип пристрою), це найпростіший спосіб створити статичну бібліотеку, а також отримати джерела бібліотеки. Після цього ви можете використовувати будь-які інструменти розробки, які вам підходять.

Ця стаття Arduino (написана для користувачів, які переходять до IDE Eclipse) описує побудову бібліотеки Arduino шляхом складання ескізу до ID ID Arduino та отримання бібліотеки з тимчасового каталогу Arduino. Прокрутіть приблизно до 1/4 сторінки до розділу

  1. Копіювання бібліотеки з проекту Ardeino IDE

0

Якщо вам просто потрібна система побудови, яка також може пілотувати програміста мікроконтролера, platformio - ваш друг.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.