1. 분할코딩 방법
- 다중탭을 이용한 분할 코딩 방법
(1) 아두이노 IDE -> 화살표 -> 새 탭
(2) 새 탭 이름 작성
(3) 분할 코딩하기 (예시)
A 탭
void setup() {
}
B 탭
void loop() {
// put your main code here, to run repeatedly:
}
- 분할 코딩 전
int test = 10;
void setup() {
Serial.begin(9600);
Serial.print(test);
}
void loop() {
// put your main code here, to run repeatedly:
}
- 분할 코딩 후
A 탭
int test = 10;
void setup() {
Serial.begin(9600);
testfunction();
}
void loop() {
// put your main code here, to run repeatedly:
}
B 탭
void testfunction(){
Serial.print(test);
}
* 유의 사항
- 다중탭을 이용하는 경우 컴파일을 이름순으로 하기 때문에 만약 A 탭에서 B탭에 존재하는 전역변수를 쓰고자 할 경우 오류가 나게 된다. 다음은 그 예시이다.
- 일반적으로 전역변수나 #define의 경우 예상치 못한 오류를 피하기 위해 main 탭에서 선언하기를 권장하고 있다
A 탭
void setup() {
Serial.begin(9600);
Serial.println(test);
}
void loop() {
// put your main code here, to run repeatedly:
}
B 탭
int test = 10;
결과
2. 분할코딩 요령 (필자의 개인적인 방법이기 때문에 더 나은 방법이 있을 수 있다)
- 이 블로그에서는 여기 작성된 방법에 따라 분할 코드를 작성한다
(1) 전역변수나 #define 같은 선언들을 작성한 탭 이름 앞에는 _를 붙인다
- 아두이노에서 다중탭 컴파일을 이름순으로 한다는 점을 이용하여 전처리가 필요한 탭들은 이름 앞에 _를 붙여 우선순위를 높여주는 방법이다
- 아무리 권장사항에서 전역변수나 #define 선언들을 한 탭에 몰아두는 것이 좋다고는 하나, 코드가 길어지고 다양한 센서들을 사용하다보면 가독성이 매우 떨어지는 걸 몸소 체험했기 때문에 어떻게든 전역변수들도 탭별로 분리를 시키고 싶었기 때문에 고안한 요령이다
(2) 탭 이름들에 대문자를 절대 쓰지 않는다
- ASCII 코드 순서에서 _는 대문자보다는 우선순위가 낮고 소문자보다는 우선순위가 높다. 그렇기 때문에 (1)을 사용하기 위해서는 탭 이름들에 대문자가 들어가서는 안 된다. 물론 대문자보다도 우선순위가 높은 특수문자들은 많지만 왜인지 아두이노에서는 탭 이름에 그러한 특수문자들을 지원하지 않는다. 전부 _로 변환된다.
(3) 이름 앞에 _를 붙이지 않은 탭에서는 함수들만 작성한다
(4) 프로젝트 명이 붙은 탭에서는 변수사용을 하지 않고 사용자 지정 함수만을 사용할 것
- 프로젝트 명이 붙은 탭은 이름순서와 상관없이 가장 먼저 컴파일 되므로 이 점 유의할 것
(폴더 이름에 해당하는 탭)
- 위 방법으로 분할 코딩을 할 경우 최소 3개의 탭을 필요로 한다.
- project 탭
- main 탭
- _main 탭 (main에서 사용될 변수나 선언들)
* 단점
- 대신 탭이 많아지기 때문에 이게 불편한 사람들은 그냥 main 탭에 변수 몰아넣고 주석으로 구별하자
실패 예시
main 탭
void setup() {
Serial.begin(9600);
test();
}
void loop() {
// put your main code here, to run repeatedly:
}
a 탭
void test(){
Serial.print(testVar);
}
b 탭
int testVar = 10;
결과
성공 예시
main 탭
void setup() {
Serial.begin(9600);
test();
}
void loop() {
// put your main code here, to run repeatedly:
}
a 탭
void test(){
Serial.print(testVar);
}
_b 탭
int testVar = 10;