메이크 파일 호환 스케치를 작성하는 방법?


9

Arduino IDE를 사용하거나 선택적으로 GCC와 makefile을 사용하여 스케치를 작성 / 업로드 할 수 있도록 스케치를 작성하고 싶습니다.

함수 선언을 맨 위에 포함시키는 방법에 대해 알고 있지만 컴파일러가 스케치를 유효한 C ++로 간주하기 위해 수행해야 할 다른 작업이 있습니까?

업데이트 1

Arduino IDE가 .ino 및 .pde 파일에 대해 수행하는 작업을 이해하는 것은 좋지만 내 질문과 관련이 없으므로 중복되지 않습니다. 내가 알고 싶은 것은 "아두 이노 IDE g ++ 모두에서 유효한 것으로 간주되도록 프로그램을 작성하는 방법 입니다.

(?) 메이크 공식 여기에 사용할 수는 메이크 사용하는 경우 수행 할 작업을 설명 하는 대신 IDE에서의를 :

# The Arduino environment does preliminary processing on a sketch before
# compiling it.  If you're using this makefile instead, you'll need to do
# a few things differently:
#
#   - Give your program's file a .cpp extension (e.g. foo.cpp).
#
#   - Put this line at top of your code: #include <WProgram.h>
#
#   - Write prototypes for all your functions (or define them before you
#     call them).  A prototype declares the types of parameters a
#     function will take and what type of value it will return.  This
#     means that you can have a call to a function before the definition
#     of the function.  A function prototype looks like the first line of
#     the function, with a semi-colon at the end.  For example:
#     int digitalRead(int pin);

...하지만 IDE와 makefile을 모두 사용하는 방법은 설명하지 않습니다 .

업데이트 2

최근 에이 질문에 직접 대답하지 않는 PlatformIO를 발견했지만 많은 프로세스를 자동화하지만 (Scons 파일 생성) 지금까지 Arduino IDE와 source + makefile 접근 방식보다 워크 플로우를 선호합니다. 저자의 좋은 지원.


따라서 질문은 내 지식을 초월한 방법이지만 Arduino.h 파일의 포함과 관련하여 고려해야 할 사항이 있습니다. 부트 로더 통합 그리고 다른 것. 나는이 질문을
따를 것이다

Arduino-CMake ( github.com/queezythegreat/arduino-cmake )를 살펴 보는 것이 좋습니다 .
jfpoilpret


1
많은 희생을 기꺼이하지 않으면 IDE와 G ++에서 직접 유효한 것으로 간주되는 "프로그램"을 작성할 수 없습니다. 이노와의 거래.
Ignacio Vazquez-Abrams 1

1
내 대답을 찾을 여기에 첨부 된 메이크의 의견.
hoosierEE

답변:


1

gcc / g ++에서는 avr-gcc / avr-g ++를 구체적으로 언급한다고 생각합니다. gcc는 대상 시스템으로 PC를 사용하여 컴파일하려고 시도하기 때문에 arduino 코드는 유효한 C / C ++ 코드로 간주되지 않을 것입니다. "WProgram.h"의 많은 매크로는 대상 시스템의 액세스 할 수없는 메모리를 나타냅니다.

헤더 파일 "WProgram.h"를 포함하고 위의 Arduino Makefile (g ++이 아닌 avr-g ++ 사용)을 사용하여 코드를 작성하면 cpp 파일이 올바르게 컴파일되고 링크되어야합니다. 마찬가지로 IDE 내에서 Arduino 코드를 열고 코드를 확인할 수 있습니다. IDE는 "WProgram.h"파일을 저장하므로 기술적으로 두 번 포함됩니다. 그러나 포함 가드는 중복 코드가 컴파일되는 것을 방지합니다.


1

일반적으로 setup()loop()기능 을 명시해야 하며 IDE의 래퍼 일뿐입니다.

void setup() {}
void loop() {}

int main() {
  setup();
  while (1)
    loop();

  return 0; // never reached
}

이것은 IDE와 명령 행 모두에서 작동합니다. IDE에서 Board와 SerialPort를 지정할 때 Makefile에서 둘 다 지정해야합니다. 따라서 두 가지 구성으로 끝납니다.

많은 사람들이 다른 편집기를 사용하거나 컴파일러 및 링커 스위치를 설정하여 더 많은 구성 옵션을 사용하기 때문에 IDE를 떠납니다.

정말 쉽게하기 위해 Arduino Makefile을 사용할 수 있습니다 . 오늘은 347로 출연했습니다.

다음은 Makefile의 예입니다.

# try: make help
#
include /usr/share/arduino/Arduino.mk
ARDUINO_DIR = /usr/share/arduino
# list boards with: make show_boards
BOARD_TAG = promicro16
ARDUINO_LIBS = EEPROM 
# MONITOR_CMD = picocom -b 9600
MONITOR_CMD = moni -config ACM0-9600.cfg
ARDUINO_PORT = /dev/serial/by-id/usb-Arduino_LLC_Arduino_Leonardo-if00
# ARDUINO_PORT = /dev/ttyACM0
# ARDUINO_PORT = /dev/ttyUSB0
OPTIMIZATION_FLAGS = -Os -fexpensive-optimizations -fstrength-reduce
#

'* .ino'파일은 변경할 필요가 없으며 Makefile파일은 동일한 디렉토리에 위치해야합니다.

한편 나는 그 Makefile방법을 선호 하지만 작은 프로젝트에는 여전히 IDE를 사용합니다.


1

내가 알고 싶은 것은 "아두 이노 IDE와 g ++ 모두에서 유효한 것으로 간주되도록 프로그램을 작성하는 방법입니다.

IDE 스케치 파일 전처리 문제를 피하는 방법을 참조하십시오 .

Makefile의 모양을 무시하고 위의 링크에서 설명한 것처럼 질문에 대한 간단한 대답은 모든 것을 IDE의 .cpp 및 .h 탭에 넣고 주 "sketch"(. ino)를 그대로 두는 것입니다. 파일) 비워 둡니다. 여전히 IDE에서 컴파일되므로 일반적인 C ++이됩니다.

다음을 사용하여 .cpp 파일을 시작하십시오.

#include <Arduino.h>

라이브러리 (예 : SPI)를 사용하는 경우 라이브러리를 기본 스케치 파일에 포함시켜야합니다. 그러면 IDE가 라이브러리를 임시 프로젝트 빌드 파일로 복사합니다. Makefile에는 필요한 라이브러리 파일이 모두 포함되어 있으므로 Makefile은 신경 쓰지 않습니다.

또한 내 대답을보십시오 : 클래스와 객체 : 실제로 얼마나 많은 파일 형식을 사용해야합니까?

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