altair의 프로젝트 일기

Picoprobe 개발환경 구성하기 본문

IT/라즈베리파이

Picoprobe 개발환경 구성하기

altair823 2022. 12. 25. 02:53

개요

 라즈베리파이 피코에서 돌아가는 코드를 개발하는 방법은 여러가지가 있다. 간단하고 편하게 Thonny와 마이크로파이썬으로 개발하거나 C/C++ SDK를 사용해 C/C++로 개발하는 방법이 있을 것이다.

 개인적으론 마이크로파이썬보다 C/C++를 더 선호한다. 이유는 다음과 같다. 

  1. (당연한 말이겠지만) C로 작성한 코드보다 속도가 느리다는 말이 있다. 
  2. Thonny의 코드 자동완성 기능이 만족스럽지 않다. C/C++의 경우 vscode로 개발한다면 훨씬 나은 자동완성을 제공한다.
  3. 아두이노 IDE로 개발하게 될 경우 C 코드는 재활용이 가능하나 마이크로파이썬은 그렇지 않다. 

 그래도 더 쉽게 개발환경을 세팅할 수 있고 bootsel 버튼을 누르거나 케이블을 뺐다 끼웠다 할 필요 없이 코드를 업로드 할 수 있어서 기온계 프로젝트처럼 간단한 프로젝트에선 확실히 더 나은 선택지다. 하지만 더 낮은 수준의 하드웨어 제어나 높은 연산능력을 충분히 활용하고 싶다면 C/C++ SDK를 사용해 개발하는 것이 유리할 것이다. 공식문서에선 Clion이나 이클립스로도 개발하는 방법을 소개하고 있지만 이번 글에선 vscode로 개발하는 법을 소개하겠다. 

 Thonny와 다르게 vscode는 코드 디버깅 기능을 기본적으로 제공하지 않는다. 게다가 임베디드 컴퓨터에 연결해 실행되는 이런 경우엔 자동으로 디버깅 환경을 세팅해줄 수도 없다. 라즈베리파이 피코 공식문서에서도 이를 세팅하는 방법을 소개하고 있다. 라즈베리파이에 회로를 연결해 SWD로 디버그 하거나 코드를 업로드하는 법을 안내한다. 

 하지만 우리 같이 개발에 필요 이상의 컴퓨팅 자원을 투자하기 원하는 사람들은 라즈베리파이가 아니라 윈도우 데스크탑이나 맥북에서 개발하고, 디버깅하고, 파일을 업로드하길 바란다. 그런 사람들을 위해 피코를 하나 더 사용해 그 모든 걸 가능하게 하는 Picoprobe를 소개한다. 

 

Picoprobe

Picoprobe wiring.

 Picoprobe를 구성하기 위해선 먼저 위 그림과 같은 와이어링 해야 한다. Picoprobe는 왼쪽 피코에서 돌아가며, 실제로 개발하는 코드는 왼쪽 Picoprobe를 통해 오른쪽 피코에 업로드되고 디버깅 할 수 있다. Picoprobe를 사용하면 micro usb 케이블을 더 이상 뺐다 끼웠다 할 필요가 없이 바로 코드를 업로드 할 수 있다. 이번 글에선 macOS에서 Picoprobe를 사용해 디버깅 하는 방법을 소개한다. 

 

준비

 먼저 Homebrew를 사용해 디펜던시를 설치한다. 

brew install libtool automake libusb wget pkg-config gcc texinfo

 그리고 라즈베리파이 리포지토리의 OpenOCD를 설치한다. 

git clone https://github.com/raspberrypi/openocd.git --branch rp2040 --depth=1
cd openocd
export PATH="/usr/local/opt/texinfo/bin:$PATH" 1
./bootstrap
./configure --disable-werror 2
make -j4

파이 피코에 설치할 Picoprobe.uf2파일을 공식 링크에서 다운로드 받는다. 또는 리포지토리에서 클론해 직접 빌드할 수 있다. 

git clone https://github.com/raspberrypi/picoprobe.git
cd picoprobe
git submodule update --init
mkdir build
cd build
cmake ..
make -j4

 이후 빌드 폴더에 있는 uf2파일을 위 그림에서 왼쪽 피코에 업로드한다. 

 

VSCode에서 디버깅하기

 이제 Picoprobe를 vscode에서 사용해보자. 다음 확장들을 설치하자. 

 

C/C++ - Visual Studio Marketplace

Extension for Visual Studio Code - C/C++ IntelliSense, debugging, and code browsing.

marketplace.visualstudio.com

 

C/C++ Extension Pack - Visual Studio Marketplace

Extension for Visual Studio Code - Popular extensions for C++ development in Visual Studio Code.

marketplace.visualstudio.com

 

Cortex-Debug - Visual Studio Marketplace

Extension for Visual Studio Code - ARM Cortex-M GDB Debugger support for VSCode

marketplace.visualstudio.com

 그리고 프로젝트 디렉토리에 있는 .vscode폴더(만약 없다면 만들면 된다)와 그 안에 settings.json, launch.json 파일(역시 없다면 만들면 된다)을 다음으로 수정하자. 

1. settings.json

{
    // These settings tweaks to the cmake plugin will ensure
    // that you debug using cortex-debug instead of trying to launch
    // a Pico binary on the host
    "cmake.statusbar.advanced": {
      "debug": {
        "visibility": "hidden"
      },
      "launch": {
        "visibility": "hidden"
      },
      "build": {
        "visibility": "default"
      },
      "buildTarget": {
        "visibility": "hidden"
      }
    },
    "cmake.buildBeforeRun": true,
    "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools",
    "cortex-debug.openocdPath": "위에서 설치한 openocd 폴더 속/src/openocd의 경로",
    "cmake.generator": "Unix Makefiles"
  }

 

2. launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Pico Debug",
            "cwd": "${workspaceRoot}",
            "executable": "${command:cmake.launchTargetPath}",
            "request": "launch",
            "type": "cortex-debug",
            "servertype": "openocd",
            // This may need to be arm-none-eabi-gdb depending on your system
            "gdbPath" : "arm-none-eabi-gdb",
            "device": "RP2040",
            "configFiles": [
                "interface/picoprobe.cfg",
                "target/rp2040.cfg"
            ],
            "svdFile": "${env:PICO_SDK_PATH}/src/rp2040/hardware_regs/rp2040.svd",
            "runToMain": true,
            // Work around for stopping at main on restart
            "postRestartCommands": [
                "break main",
                "continue"
            ],
            "searchDir": ["위에서 설치한 openocd 폴더 속/tcl의 경로"],
        }
    ]
  }

 여기까지 완료했다면 프로젝트를 먼저 빌드한다. 

 그리고 vscode의 디버깅 탭에 들어가 새로 만들어진 디버그 구성 실행 버튼을 누르자. 

main 함수가 시작할 때 breakpoint가 걸리며 디버깅이 시작된다. 

만약 usb를 통한 표준 입출력이 필요하다면 일반적으로 피코에서 입력을 받는 방법을 그대로 사용하면 된다. 

minicom -D /dev/tty.usbmodem***** -b 115200

위 코드에서 *****로 채워진 부분은 기기마다, 연결된 포트마다 다를 수 있으므로 탭 키를 눌러 자동완성된 결과 중 하나로 선택해 테스트 해보기 바란다. 

 

마무리

개인적인 프로젝트 여러 개를 진행하면서 매번 Picoprobe를 설정하기 귀찮아서 백업삼아 적어놓는 글이다. 다음에는 윈도우나 라즈베리파이 4에서 Picoprobe로 디버깅 해봐야겠다. 

Comments