Arduino IDE가없는 Arduino 프로그래밍


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를 설치해야한다는 사실에 의해 연기되었습니다. 종류의 목적을
이기다

답변:


9

Arduino IDE를 설치하지 않고도 이것을 쉽게 만들 수있는 사용자 정의 빌드 시스템 (Ruby를 사용)으로 작은 프로젝트를 만들었습니다. 기본적으로 템플릿 Makefile과 루비 스크립트를 사용하여 Arduino 라이브러리 컴파일을 매우 쉽게 만듭니다. https://github.com/Earlz/make-wiring 에서 볼 수 있습니다

그러나 나는 당신 자신을 굴리는 것에 대한 정보를 위해 여기에 오래된 대답을 남길 것입니다. 그래도 꽤 번거롭고 성가시다.

지도:

  1. Arduino IDE 소스 코드 사본 다운로드
  2. hardware/arduino/cores/arduinoarduino_build라고하는 새 디렉토리에 내용을 복사 하십시오.
  3. pins_arduino.hArduino 변형이 있는 파일 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)

그런 다음 컴파일 된 라이브러리를 사용하기 위해 다음과 같은 간단한 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 모두에서 작동해야합니다.

이미 컴파일 된 이진 라이브러리 ( "standard"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 IDE로 스케치를 컴파일하고 Arduino의 임시 디렉토리에서 라이브러리를 검색하여 Arduino 라이브러리를 빌드하는 방법을 설명합니다. 페이지의 1/4 정도 아래로 스크롤

  1. Arduino IDE 프로젝트에서 라이브러리 복사

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.