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


10

Недавно я начал новый проект, используя мой Arduino, который некоторое время собирал пыль. Наряду с пылью собирает физическую плату, моя копия библиотек avr-gcc и Arduino. Я могу управлять обновлением avr-gcc, но не могу вспомнить, как я компилировал библиотеки Arduino. В исходном коде Arduino есть список исходных файлов и тому подобное, но нет никакого make-файла (который я вижу) для фактического построения библиотеки. Меня не волнует создание IDE, я просто хочу библиотеку в двоичном формате и файлы заголовков, которые мне понадобятся. Есть ли какая-либо документация для этого?

Я не хочу использовать Arduino IDE, я предпочитаю использовать свой собственный текстовый редактор и make-файл.


1
Это может быть полезно для вас.
Арминб

1
@arminb bleaklow.com/2010/06/04/a_makefile_for_arduino_sketches.html будет более полезным, чем это. Ваша ссылка просто дает способ создания эскизов из командной строки, а не способ создания библиотеки arduino. В любом случае не имеет значения, потому что я ответил на свой вопрос
Earlz


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

Ответы:


9

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

Тем не менее, я оставляю здесь старый ответ для получения информации о том, как прокрутить свой собственный. Это довольно громоздко и раздражает, хотя:

Направления:

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

И затем, чтобы использовать скомпилированные библиотеки и тому подобное, вы можете использовать простой make-файл, подобный следующему:

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 этот make-файл должен быть достаточно перспективным, требуя всего лишь нескольких модификаций OBJS и HDRS. Кроме того, этот make-файл должен работать как с 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

и для каждого проекта makefile:

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 (написанной для пользователей, переходящих в Eclipse IDE) описывается создание библиотеки Arduino путем компиляции эскиза с помощью Arduino IDE и извлечения библиотеки из временного каталога Arduino. Прокрутите вниз примерно на 1/4 страницы к разделу

  1. Копирование библиотеки из проекта Arduino IDE

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.