Lập trình cho Arduino mà không có Arduino IDE .. nhưng với các thư viện được cung cấp?


10

Gần đây tôi đã bắt đầu một dự án mới bằng cách sử dụng Arduino của tôi đã thu thập bụi trong một thời gian. Cùng với bảng vật lý thu thập bụi, bản sao avr-gcc và thư viện Arduino của tôi cũng vậy. Tôi có thể quản lý việc cập nhật avr-gcc, nhưng tôi không thể nhớ mình đã biên dịch các thư viện Arduino như thế nào. Với nguồn Arduino, có các tệp nguồn được liệt kê và như vậy, nhưng không có tệp thực hiện (mà tôi có thể thấy) để thực sự xây dựng thư viện. Tôi không quan tâm đến việc xây dựng IDE, tôi chỉ muốn thư viện ở định dạng nhị phân và các tệp tiêu đề mà tôi cần. Có bất kỳ tài liệu hoặc như vậy để làm điều này?

Tôi không muốn sử dụng Arduino IDE, tôi thích sử dụng trình soạn thảo văn bản của riêng tôi và một tệp thực hiện.


1
Điều này có thể hữu ích cho bạn.
arminb

1
@arminb bleaklow.com/2010/06/04/a_makefile_for_arduino_sketches.html sẽ hữu ích hơn thế. Liên kết của bạn chỉ đưa ra một cách để xây dựng các bản phác thảo từ dòng lệnh, không phải là một cách để xây dựng thư viện arduino. Dù thế nào cũng không liên quan vì tôi đã trả lời câu hỏi của riêng mình
Earlz


@jippie Tôi đã xem xét điều đó (không phải khi được hỏi, nhưng gần đây khi xem lại điều này) nhưng đã bị loại bỏ bởi thực tế là bạn phải cài đặt Arduino IDE. Loại thất bại mục đích
Earlz 15/12/13

Câu trả lời:


9

Tôi đã tạo ra một dự án nhỏ với một hệ thống xây dựng tùy chỉnh (sử dụng Ruby) giúp việc này trở nên khá dễ dàng mà không cần phải cài đặt Arduino IDE. Về cơ bản, nó sử dụng một Makefile mẫu và một tập lệnh ruby ​​để biên dịch các thư viện Arduino cực kỳ dễ dàng. Bạn có thể xem nó tại https://github.com/Earlz/make-wires

Tuy nhiên, tôi để lại câu trả lời cũ ở đây để biết thông tin về việc tự lăn. Mặc dù nó khá cồng kềnh và khó chịu:

Hướng:

  1. Tải về một bản sao của mã nguồn Arduino IDE
  2. Sao chép nội dung của hardware/arduino/cores/arduinomột thư mục mới tôi sẽ gọi là arduino_build
  3. Sao chép pins_arduino.htệp từ bất kỳ biến thể Arduino nào là của bạn từ hardware/arduino/variants(kiểm tra bảng.txt nếu bạn không chắc chắn) vào arduino_build
  4. Thêm tệp này vào 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

Và sau đó chỉ cần chạy

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

Và sau đó để sử dụng các thư viện đã biên dịch và như vậy bạn có thể sử dụng một tệp thực hiện đơn giản như thế này:

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

Ngoài ra, nếu bạn cố gắng biên dịch các thư viện trong đó, libraries/bạn sẽ gặp lỗi liên kết nếu bạn không thực hiện đúng thứ tự. Chẳng hạn, tôi đã phải làm điều này để sử dụng 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

Các -larduinophải là thư viện cuối cùng trên dòng lệnh

Dù sao, đây là một cách khá dễ dàng để biên dịch nó cho tôi. Khi các phiên bản tương lai của Ardunio ra mắt, tệp tạo tệp này sẽ khá bằng chứng trong tương lai, chỉ cần một vài sửa đổi đối với OBJS và HDRS. Ngoài ra, tệp tạo tệp này sẽ hoạt động với cả BSD make và GNU make

Xem thêm một phiên bản sửa đổi một chút của câu trả lời này trên blog của tôi với thư viện nhị phân đã được biên dịch (được biên dịch bằng cách sử dụng "pin" tiêu chuẩn "pin_arduino.h).


** CHỈNH SỬA **

Tôi thấy rằng việc thêm các cờ tối ưu hóa trình biên dịch sau vào cả thư viện xây dựng Makefile và mỗi dự án riêng lẻ Makefile làm giảm đáng kể kích thước của tệp nhị phân được biên dịch cuối cùng. Điều này làm cho kích thước nhị phân cuối cùng có thể so sánh với IDE.

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

.

Vì vậy, đối với thư viện xây dựng 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

và, cho mỗi dự án 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

.

Tham chiếu: http://arduino.cc/forum/index.php?topic=153186.0


3

Nếu bạn sẵn sàng sử dụng Arduino IDE một lần (hoặc một lần cho mỗi loại thiết bị), đó là cách dễ nhất để xây dựng thư viện tĩnh, cũng như lấy các nguồn thư viện. Sau đó, bạn có thể sử dụng bất kỳ công cụ phát triển nào phù hợp với bạn.

Bài viết về Arduino này (được viết cho người dùng chuyển sang IDE Eclipse) mô tả việc xây dựng thư viện Arduino bằng cách biên dịch một bản phác thảo với Arduino IDE và lấy thư viện từ thư mục tạm thời của Arduino. Cuộn xuống khoảng 1/4 trang đến phần

  1. Sao chép thư viện từ một dự án Arduino IDE

0

Nếu bạn chỉ cần một hệ thống xây dựng cũng có thể thí điểm lập trình vi điều khiển của bạn, platformio là bạn của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.