Visual Studio Code 로 Arduino Uno Debugging
VSCode 로 아두이노 우노(Arduino Uno)보드 디버깅 환경 설정 및 실행하는 방법
에 대해 소개합니다. Visual Studio Code 를 사용해 아두이노 프로그래밍 하시는 방법을 모르시는 분은 이전 포스트들을 참고해주세요.VSCode Arduino Debugging
Visual Studio Code 의 Arduino Extention 은 Arduino M0 Pro, Arduino Zero Pro 보드에서만 디버깅 모드를 지원합니다. 이 보드들은 디버거 인터페이스를 포함하고 있습니다. Arduino Uno 보드는 디버거가 포함되어 있지 않아 VIsual Studio Code 에서 기본적으로 디버그 모드를 지원하지 않습니다.
아래 포스트는 avr-debugger 라이브러리를 사용하여 Software 적인 방법으로 Arduino Uno 디버깅 환경을 구성하는 방법에 대해 설명합니다. 이 방법으로 Arduino Nano, Arduino Mega 보드만 사용이 가능합니다.
제약사항
Arduino Uno,Arduino Nano,Arduino Mega보드만 사용이 가능합니다.- 파일의 경로에 한글이 있으면 안됩니다.
- 실제 속도 보다 훨씬 느리게 동작 합니다.
- Serial 통신과 함께 사용할 수 없습니다.
- 2번핀 사용이 불가 합니다.
- 서비스 루틴에서는 프로그램을 중지할 수 없습니다.
디버깅 환경 설정 방법
1. avr-debugger Library 저장
라이브러리는 아래의 경로에서 받을 수 있습니다.
다운로드 경로 : https://github.com/jdolinay/avr_debug
avr-debugger 라이브러리 다운로드
다운받은 zip 파일 압축을 풀고, 압축 푼 파일의 avr_debug-master/arduino/library/avr-debugger 폴더를 아두이노 라이브러리 보관 폴더에 복사합니다.
라이브러리 내의 avr-debugger 폴더를 아두이노 라이브러리 폴더로 이동
라이브러리 보관 폴더는 Arduino IDE -> 파일 -> 환경설정 -> 스케치북 위치 란에서 확인 가능합니다.
아두이노 라이브러리 경로 확인 방법
제 PC기준으로 경로 C:\Users\{UserName}\Documents\Arduino\libraries 입니다.
{UserName} 은 자신의 윈도우 UserName 을 입력 합니다.
해당 경로가 .vscode/c_cpp_properties.json 의 includePath 에 등록되어 있는지 확인이 필요합니다. 등록 되어 있지 않은 경우 경로를 추가합니다. avr-debugger 폴더에서 라이브러리 헤더(.h) 파일은 하위 src 폴더에 있습니다.
VS Code 를 껏다가 다시 켭니다.
2. 작업 파일에서 avr-debugger 라이브러리 추가
VSCode Arduino 작업 화면에서 F1 로 Command Palette 를 열러 Library manager 를 실행합니다. avr-debugger 를 검색 후 Inlcude Library 를 선택 합니다.
디버그 모드를 사용하기 위해 void setup{} 에 debug_init() 함수를 추가합니다.
프로그램 빌드가 정상적으로 되는지 확인 합니다.
작업 파일 avr-debugger 라이브러리 추가 및 디버그 초기화 함수 추가
3. 프로그램 최적화 기능 끄기
컴파일러가 자동으로 컴파일시 코드를 최적화 하는 기능을 끄는 과정입니다. avr-debugger 라이브러리 폴더에서 platform.local.txt 파일을 찾아 아두이노 설치 경로 이하 avr 폴더에 복사합니다.
platform.local.txt 파일 복사 위치
제 PC의 경우 platform.local.txt 파일 기존 위치와 복사할 경로는 아래와 같습니다.
platform.local.txt파일 경로 :C:\Users\{UserName}\Documents\Arduino\libraries\avr-debuggerplatform.local.txt파일 복사할 위치 :C:\Program Files (x86)\Arduino\hardware\arduino\avr
4. VS Code 디버깅 설정
VSCode의 디버깅 버튼을 선택 합니다.
세팅 버튼을 눌리면 아래의 3가지 모드 중에서 C++ (GDB/LLDB) 를 선택합니다.
VSCode 디버깅 환경 선택
C++ (GBD/LLDB)를 선택하면 작업폴더의 .vscode 폴더내에 launch.json 파일이 생성됩니다.
아래와 같이 launch.json 파일을 수정합니다.
기존 파일에서 수정된 코드 줄 번호 12, 19, 20, 23, 24, 25
12번 줄 : 디버깅 모드를 실행할 작업 파일 경로를 선택19번 줄 : avr-gdb.exe 파일 경로20번 줄 : 자신의 시리얼 컴 포트 번호 수정23~25번줄 : 아래의 코드대로 수정
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 | { // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "(gdb) Lanch", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/build/Temp.ino.elf", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "c:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr\\bin\\avr-gdb.exe", "miDebuggerServerAddress": "\\\\.\\COM3", "setupCommands": [ { "description": "Remote debug enable", "text": "-gdb-set debug remote 1", "ignoreFailures": false } ] } ] } | cs |
5. 디버깅 시작
아두이노에 프로그램을 업로드합니다. 프로그램이 수정되면, 프로그램을 항상 업로드 한 상태에서 실행해야 합니다.
코드 줄 번호 왼쪽을 클릭하여 종단점 설정합니다. 종단점을 설정하지 않으면 디버깅 모드를 사용 할 수 없습니다. 디버깅 실행 아이콘을 클릭하여 디버깅 모드를 실행합니다.
디버그 모드가 실행되면 첫 번째 종단점에서 프로그램이 정지합니다. 이후 VSCode 에서 지원하는 디버그 방식을 사용하여 디디버깅을 시작할 수 있습니다.
많은 기능들이 있지만 주요하게 아래의 기능을 참고해주세요.
- 전역 변수는
WATCH탭에서 수동으로 추가 - 지역 변수는
VARIABLES탭에 자동으로 추가 됩니다. - 변수 값 변경하고 싶을 때, 하단
DEBUG CONSOLE탭에서-exec set vat 변수명 = 변수값으로 수정 - 디버그 툴바의 6개 기능으로 디버깅 진행 - 왼쪽 1번 우측 6번
- 1번 아이콘 : 다음 종단점(Break Point) 까지 실행
- 2번 아이콘 : 한줄씩 실행
- 3번 아이콘 : 한줄씩 실행(내부 함수 정의 부분으로 진입)
- 4번 아이콘 : 내부 함수에 있는 경우 내부 함수 실행 후 빠져 나오기
- 5번 아이콘 : 처음부터 다시 실행
- 6번 아이콘 : 정지
실행 화면
마무리
여러 포스트에 걸쳐 Visual Studio Code 를 사용하여 Arduino 프로그래밍 환경 설정과 디버깅 모드 실행에 대해 알아보았습니다. 적고 싶은 내용은 많치만 포스트 글로 작성하려니 많은 어려움이 있어, 설명에 부족한 점과 내용에 부족한 점도 많았습니다. 궁금하신 내용을 댓글로 달아주시면 아는 한도 내에서 답변 드리겠습니다. 이후 포스트는 계속해서 아두이노 강좌를 이어나가도록 하겠습니다.
끝까지 읽어 주셔서 감사합니다.^^
'Embedded > Arduino' 카테고리의 다른 글
아두이노 코딩 스위치 입력 폴링 방식 (Switch Polling) 으로 LED 제어 (0) | 2020.07.19 |
---|---|
아두이노 코딩 LED Toggle (On/OFF) 여러 가지 방식 (0) | 2020.07.19 |
아두이노 팁 #3. Visual Studio Code로 아두이노 코딩 사용법과 나노팁 (0) | 2020.07.16 |
아두이노 팁 #2. Visual Studio Code로 아두이노 프로그래밍 장점 (feat. Arduino IDE 불편해) (1) | 2020.07.15 |
아두이노 강좌 #15 시리얼 통신 포트 추가로 사용하기 SoftwareSerial.h (0) | 2020.07.14 |