IDE가 물건을 구성하는 방법
첫 번째는 IDE가 "스케치"를 구성하는 방법입니다.
- 주
.ino
. 파일은가, 그래서에있는 폴더와 동일한 이름의 하나 foobar.ino
의 foobar
폴더 - 주요 파일이 foobar.ino입니다.
.ino
해당 폴더의 다른 파일은 기본 파일의 끝 부분에 알파벳 순서로 알파벳 순서로 함께 연결됩니다 (주 파일의 위치에 상관없이 알파벳순).
- 이 연결된 파일은 파일이
.cpp
됩니다 (예 : foobar.cpp
)-임시 컴파일 폴더에 저장됩니다.
- 전처리 기는 "유용하게"해당 파일에서 찾은 함수에 대한 함수 프로토 타입을 생성합니다.
- 기본 파일에서
#include <libraryname>
지시문을 스캔합니다 . 이로 인해 IDE는 각 언급 된 라이브러리의 모든 관련 파일을 임시 폴더로 복사하고 컴파일 명령을 생성합니다.
- 모든
.c
, .cpp
또는 .asm
스케치 폴더에있는 파일 (즉, 그들은 별도의 파일과 같은 일반적인 방법으로 컴파일 된) 별도의 컴파일 단위로 빌드 프로세스에 추가
- 모든
.h
파일은 임시 컴파일 폴더로 복사되므로 .c 또는 .cpp 파일로 참조 할 수 있습니다.
- 컴파일러는 빌드 프로세스 표준 파일에 추가합니다 (예
main.cpp
:)
- 그런 다음 빌드 프로세스는 위의 모든 파일을 객체 파일로 컴파일합니다.
- 컴파일 단계가 성공하면 AVR 표준 라이브러리와 함께 연결됩니다 (예 : 제공
strcpy
등).
이 모든 것의 부작용은 메인 스케치 (.ino 파일)를 모든 의도와 목적에 대한 C ++로 간주 할 수 있다는 것입니다. 그러나 함수 프로토 타입 생성은주의하지 않으면 오류 메시지가 불분명해질 수 있습니다.
전 처리기 문제 방지
이러한 특이성을 피하는 가장 간단한 방법은 기본 스케치를 비워두고 다른 .ino
파일을 사용하지 않는 것 입니다. 그런 다음 다른 탭 ( .cpp
파일)을 만들고 물건을 다음과 같이 넣으십시오.
#include <Arduino.h>
// put your sketch here ...
void setup ()
{
} // end of setup
void loop ()
{
} // end of loop
를 포함해야합니다 Arduino.h
. IDE는 기본 스케치에 대해 자동으로이를 수행하지만 다른 컴파일 단위에 대해서는이를 수행해야합니다. 그렇지 않으면 String, 하드웨어 레지스터 등을 알 수 없습니다.
설정 / 주요 패러다임을 피하십시오
설정 / 루프 개념으로 실행할 필요는 없습니다. 예를 들어 .cpp 파일은 다음과 같습니다.
#include <Arduino.h>
int main ()
{
init (); // initialize timers
Serial.begin (115200);
Serial.println ("Hello, world");
Serial.flush (); // let serial printing finish
} // end of main
강제 라이브러리 포함
"빈 스케치"개념으로 실행하는 경우 프로젝트의 다른 위치 (예 .ino
: 기본 파일) 를 계속 포함해야 합니다.
#include <Wire.h>
#include <SPI.h>
#include <EEPROM.h>
IDE가 라이브러리 사용에 대한 기본 파일 만 스캔하기 때문입니다. 효과적으로 주 파일을 사용중인 외부 라이브러리를 지정하는 "프로젝트"파일로 간주 할 수 있습니다.
명명 문제
동일한 단일 .ino 파일에서 C ++ 스타일 클래스를 선언합니다 (들어 봤지만 작동하지는 않았지만 가능합니까?);
예, 다음과 같이 컴파일됩니다.
class foo {
public:
};
foo bar;
void setup () { }
void loop () { }
그러나 당신은 정상적인 연습을 따르는 것이 가장 꺼져 : 당신의 선언을 넣어 .h
파일에 정의 (구현) .cpp
(나 .c
) 파일.
왜 "아마도"?
내 예제에서 볼 수 있듯이 모든 것을 하나의 파일로 묶을 수 있습니다 . 대규모 프로젝트의 경우보다 체계적으로 구성하는 것이 좋습니다. 결국 중대형 프로젝트에서 "블랙 박스"로 분리하려는 단계, 즉 한 가지 일을 잘 수행하고 테스트를 거치고 자체적으로 포함 된 클래스로 이동합니다 ( 가능한 멀리).
이 클래스는 다음 프로젝트에 여러 다른 파일에 사용되는 경우 별도 곳이다 .h
와 .cpp
파일을 놀이로 온다.
이 .h
파일 은 클래스를 선언 합니다. 즉, 다른 파일이 자신의 기능, 기능 및 호출 방법을 알 수 있도록 충분한 세부 정보를 제공합니다.
이 .cpp
파일 은 클래스를 정의 (구현)합니다. 즉, 실제로 클래스가 작업을 수행하도록하는 함수와 정적 클래스 멤버를 제공합니다. 한 번만 구현하려고하므로 별도의 파일에 있습니다.
.h
파일을 다른 파일에 포함됩니다 것입니다. .cpp
파일은 클래스의 기능을 구현하기 위해 IDE에 의해 한 번 컴파일됩니다.
도서관
이 패러다임을 따르는 경우 전체 클래스 ( .h
및 .cpp
파일)를 라이브러리로 매우 쉽게 이동할 수 있습니다. 그런 다음 여러 프로젝트간에 공유 할 수 있습니다. 요구되는 모든 폴더 (예. 수 있도록하는 것입니다 myLibrary
)와 넣어 .h
와 .cpp
그것으로 파일을 (예를 들면. myLibrary.h
그리고 myLibrary.cpp
) 다음 내에서이 폴더를 넣어 libraries
스케치가 보관되어있는 폴더 (스케치북 폴더) 폴더에.
IDE를 다시 시작하면 이제이 라이브러리에 대해 알게됩니다. 이 작업은 매우 간단하므로 이제 여러 프로젝트에서이 라이브러리를 공유 할 수 있습니다. 나는 이것을 많이한다.
좀 더 자세한 내용은 여기를 참조 하십시오 .