การเขียนโปรแกรมสำหรับ Arduino ไม่มี Arduino IDE .. แต่มีไลบรารีที่ให้มา


10

ฉันเพิ่งเริ่มโครงการใหม่โดยใช้ Arduino ของฉันที่ได้รับการรวบรวมฝุ่นในขณะที่ นอกจากบอร์ดเก็บฝุ่นแล้วแผ่นสำเนา avr-gcc และห้องสมุด Arduino ของฉันก็มีเช่นกัน ฉันสามารถจัดการอัพเดต avr-gcc ได้ แต่ฉันจำไม่ได้ว่าฉันรวบรวมไลบรารี Arduino อย่างไร ด้วยแหล่งที่มาของ Arduino มีไฟล์ซอร์สที่ระบุไว้และเช่นนั้น แต่ไม่มี makefile (ที่ฉันเห็น) สำหรับการสร้างไลบรารีจริง ๆ ฉันไม่สนใจเกี่ยวกับการสร้าง IDE ฉันแค่ต้องการไลบรารีในรูปแบบไบนารีและไฟล์ส่วนหัวที่ฉันต้องการ มีเอกสารหรือสิ่งใดที่ทำเช่นนี้?

ฉันไม่ต้องการใช้ Arduino IDE ฉันชอบใช้ตัวแก้ไขข้อความและ makefile ของตัวเอง


1
สิ่งนี้อาจเป็นประโยชน์กับคุณ
arminb

1
@arminb bleaklow.com/2010/06/04/a_makefile_for_arduino_sketches.htmlจะมีประโยชน์มากกว่านั้น ลิงก์ของคุณเป็นเพียงวิธีในการสร้างภาพร่างจากบรรทัดคำสั่งไม่ใช่วิธีการสร้างไลบรารี arduino ไม่เกี่ยวข้อง แต่อย่างใดเพราะฉันได้ตอบคำถามของตัวเองแล้ว
Earlz


@ jippie ฉันดูที่ (ไม่เมื่อถาม แต่เมื่อเร็ว ๆ นี้เมื่อมาถึงนี้) แต่ถูกเลื่อนออกไปจากข้อเท็จจริงที่ว่าคุณต้องติดตั้ง Arduino IDE ชนิดของการเอาชนะวัตถุประสงค์
Earlz

คำตอบ:


9

ฉันได้สร้างโครงการเล็ก ๆ ด้วยระบบ build ที่กำหนดเอง (โดยใช้ Ruby) ที่ทำให้มันง่ายมากโดยไม่ต้องติดตั้ง Arduino IDE โดยพื้นฐานแล้วมันใช้เท็มเพลต Makefile และสคริปต์ทับทิมเพื่อทำให้การรวบรวมไลบรารี Arduino นั้นง่ายมาก คุณสามารถดูได้ที่https://github.com/Earlz/make-wiring

อย่างไรก็ตามฉันจะทิ้งคำตอบเก่าไว้ที่นี่สำหรับข้อมูลเกี่ยวกับการกลิ้งของคุณเอง มันค่อนข้างยุ่งยากและน่ารำคาญ แต่:

ทิศทาง:

  1. ดาวน์โหลดสำเนาของซอร์สโค้ด IDE IDE
  2. คัดลอกเนื้อหาของhardware/arduino/cores/arduinoไปยังไดเรกทอรีใหม่ฉันจะเรียกว่า arduino_build
  3. คัดลอกpins_arduino.hไฟล์จากตัวแปร Arduino ตัวไหนเป็นของคุณจากhardware/arduino/variants(ตรวจสอบ boards.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)

จากนั้นเพื่อใช้ประโยชน์จากไลบรารีที่คอมไพล์และเช่นนี้คุณสามารถใช้ไฟล์ง่าย ๆ แบบนี้:

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/คุณจะได้รับข้อผิดพลาด linker หากคุณไม่ทำสิ่งที่ถูกต้อง ตัวอย่างเช่นฉันต้องทำสิ่งนี้เพื่อใช้ 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

ดูคำตอบนี้ในเวอร์ชั่นที่แก้ไขเล็กน้อยในบล็อกของฉันด้วยไบนารีที่คอมไพล์แล้วของไลบรารี (เรียบเรียงโดยใช้หมุด "มาตรฐาน"


** แก้ไข **

ฉันพบว่าการเพิ่มแฟล็กการปรับให้เหมาะสมของคอมไพเลอร์ต่อไปนี้ลงในทั้ง 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

.

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


3

หากคุณยินดีที่จะใช้ Arduino IDE หนึ่งครั้ง (หรือหนึ่งครั้งต่อประเภทอุปกรณ์) มันเป็นวิธีที่ง่ายที่สุดในการสร้างห้องสมุดแบบสแตติกรวมถึงรับแหล่งห้องสมุด หลังจากนั้นคุณสามารถใช้เครื่องมือในการพัฒนาที่เหมาะกับคุณ

นี้บทความ Arduino (เขียนสำหรับผู้ใช้ที่จะย้ายไป Eclipse IDE) อธิบายการสร้างห้องสมุด Arduino โดยการรวบรวมร่างกับ Arduino IDE และเรียกห้องสมุดจากไดเรกทอรีชั่วคราวของ Arduino เลื่อนลงประมาณ 1/4 ของหน้าไปยังส่วน

  1. คัดลอกไลบรารีจากโครงการ Arduino IDE

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.