티스토리 뷰

VSCode 환경구성

VSCode에서 아두이노 환경구성하기

로봇이 맞아요 2024. 1. 30. 15:51

아두이노 IDE의 경우 간단하게 사용하기에는 부족함이 없지만, 조금 더 확장시켜서 헤더를 직접 작성한다거나, 기타 심도있는 작업을 하기에는 무리가 있다.

그리하여 VSCode를 사용하여 환경을 구성하고 작업을 하곤 했다.

 

https://juahnpop.tistory.com/71

 

아두이노 팁 #1. Visual Studio Code 아두이노 환경설정

Visual Studio Code(VS Code)로 아두이노 프로그래밍하기 본 포스트의 내용은 아두이노 프로그래밍을 위해서 필수로 필요한 부분이 아닙니다. Arduino IDE 로 프로그래밍을 하다가 좀 더 쾌적한 환경에서

juahnpop.tistory.com

 

위의 블로그는 내가 자주 참고하곤하던 환경구성 블로그이다.

위의 블로그를 따라 VSCode의 환경구성을 완료하고 여러가지 테스트를 하던 중 문제가 발생했다.

 

 

일반 Serial에 대해 식별자 정의 문제가 발생하는 경우는 여러가지 해법이 나와있었지만, 그 외에 Serial1이나 2등을 지원하는 보드를 사용할 경우 정말정말 거슬리는 빨간 줄이 나타나는 현상이 발생해서 이를 해결하기 위해 아두이노 헤더를 뜯어보았다.

결론부터 말하자면, Arduino 를 VSCode에서 사용하기 위해 만든 ../.vscode/c_cpp_properties.json을 수정해 주기만 하면 된다.

사실 수정수준도 아니고 글자 몇개만 추가하면 된다.

 

원래의 환경구성 상태라면 위와 같이 되어있겠지만, 여기서

"defines" : [ ]

부분에 "UBRR1H"를 추가해주기만 하면 된다.

내가 사용한 c_cpp_properties.json은 다음과 같다.

{
  "configurations": [
      {
          "name": "Win32",
          "includePath": [
              "C:\\Program Files (x86)\\Arduino\\tools\\**",
              "C:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\**",
              "C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr\\avr\\include", 
              "C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr\\lib\\gCc\\avr\\7.3.0\\include\\**" 
          ],
          "forcedInclude": [
              "C:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino\\Arduino.h"
          ],
          "intelliSenseMode": "msvc-x64",
          "defines": [
              "USBCON",
              "UBRR1H"
             
          ]
      }
  ],
  "version": 4
}

여기서 "includePath"라던가, "forceInclude"부분은 각자 Arduino의 소스에 맞게 경로를 변형시키면 된다.

그래서 어떻게 찾게 되었는가에 대해 설명하자면, Arduino의 C드라이브 내 소스를 찾아 들어가보면 다음과 같은 파일들을 찾을 수 있다.

 

나의 경우에는 아래의 경로에서 찾을 수 있었다.

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino

이 중 HardwareSerial.h 를 열어보면 다음과 같은 코드를 볼 수 있다.

...

#if defined(UBRRH) || defined(UBRR0H)
  extern HardwareSerial Serial;
  #define HAVE_HWSERIAL0
#endif
#if defined(UBRR1H)
  extern HardwareSerial Serial1;
  #define HAVE_HWSERIAL1
#endif
#if defined(UBRR2H)
  extern HardwareSerial Serial2;
  #define HAVE_HWSERIAL2
#endif
#if defined(UBRR3H)
  extern HardwareSerial Serial3;
  #define HAVE_HWSERIAL3
#endif

...

간단히 내가 이해한 바에 의하면 UBRXH가 기 정의되어 있다면, HAVE_HWSERIALX가 정의되고, 이 정의는 각각 HardwareSerialX.h에 포함된 # if defined를 통해 HardwareSerial을 사용할 수 있도록 하는 것으로 보인다.

아무튼 Serial1이 아니라 Serial2나 Serial3를 사용하는 경우에도 똑같이 c_cpp_properties.json에 추가해주면 신경쓰이는 빨간줄 없이 편안하게 사용할 수 있을것으로 보인다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함