Raspberry Pi Picoをデバッガーで動かす
dhrystoneをNucleoに続いてPicoで動かそうと思いましたが、とりあえずうまく動かなかったので、まずデバッガーを使えるようにしてみます。
対象は前にやった“Hello World”サンプルです。
前回の様に「Getting Started with Raspberry Pi Pico 」をベースにやっていきます。ちなみにこのPDFではRaspberry Pi 4でやっていますが、私は手持ちのRaspberry Pi 2Bでやっています。
GDB と OpenOCD インストール
まずGDB(GNUデバッガー)をインストールします。
1 |
sudo apt install gdb-multiarch |
次にOpenOCDのインストールですがRaspberry Pi Pico事始め(Lチカ)でpico_setupスクリプトを実行していればOpenOCDはインストールされています。
Visual Studio Codeのインストールと設定
今まで実は(というほどのことでもないですが)、Windows側からSSH接続してやっていましたが、いよいよデバッガーと接続してVisual Studio Code(VSCode)でデバッグというとさすがにSSH接続というわけにはいかない(はず)ので、直接ラズベリーパイにVSCodeをインストールしてデバッグ環境を整えたいと思います。
GUIでなければSSH接続でもできますが、さすがにデバッガーはGUI環境で動かしたいところです。
直接ラズベリーパイ操作といってもモニター、キーボード、マウスを別途用意するのは面倒なのでVNC Viewerを使って相変わらずSSH接続なのですが…
ラズベリーパイにVSCodeをインストールするにはhttps://code.visualstudio.com/downloads/から.deb/ARMを選択してダウンロードしてインストールします。
ついで拡張機能をインストールするため、以下のコードを実行します。
1 2 3 |
code --install-extension marus25.cortex-debug code --install-extension ms-vscode.cmake-tools code --install-extension ms-vscode.cpptools |
“pico-sdk”にパスを通してから、”code”でVSCodeを起動します。
1 2 |
export PICO_SDK_PATH=/home/pi/pico/pico-sdk code |
「ファイル」→「フォルダーを開く…」で”home/pi/pico/pico-examples”を指定します。
VSCodeを起動すると拡張機能CMake Toolsがインストールされているので右下にポップアップが現れるので「Yes」を押すとコンパイラーの選択を促されるので”GCC for arm-none-eabi”を選択します。
これを逃しても下部の青いバー上の”No kit Selected”をクリックすれば選択できるようになります。
同じく下部の青いバー上の”all”のままだと”Build”したときに”pico-examples”下の全てのサンプルプログラムをbuildしてしまい時間がかかるので、”hello_serial”を選択しておきます。
下部の青いバー上の”CMake:[Debug]:Ready”の所をクリックして”Debug”、”Release”を選択できます。今回はデバッガーを動かすので”Debug”のままでいいです。
pico-examplesリポジトリーには、OpenOCDを起動してGDBを接続して最後にCMakeがbuildするように構成されているアプリケーションを起動するデバッグ構成の例が含まれています。これを使うとワンクリックでデバッグ開始直前まで構成されるので便利です。
やり方としてはpico-examplesディレクトリー下に/.vscodeディレクトリーを作り、そこにlaunch-raspberrypi-swd.jsonをlaunch.jsonとして、settings.jsonをそのままsettings.jsonとしてコピーするだけです。
1 2 3 4 |
cd ~/pico/pico-examples mkdir .vscode cp ide/vscode/launch-raspberrypi-swd.json .vscode/launch.json cp ide/vscode/settings.json .vscode/settings.json |
これでソフトウェアの準備ができました。次はハードウェアの準備です。
SWD(Serial Wire Debug)接続
PicoのSWD端子(USBコネクタの逆サイドの短辺部分の3ピン)とラズベリーパイとを接続します。
Raspberry Pi | Raspberry Pi Pico |
GND(Pin 20) | SWD GND |
GPIO24(Pin 18) | SWDIO |
GPIO25(Pin 22) | SWCLK |
デバッグ開始
VSCodeの左側の三角に虫のマーク(実行とデバッグ(Ctrl+Shift+D))をクリックして、左上の「▷ Pico Debug」 をクリックするとBuild、OpenOCD起動、GDB接続が一連の動作として行われてmain()関数の先頭でbreakで止まっています。
後は普通にデバッグできます。
できますが結構重い上に不安定です(重いのはラズベリーパイ2Bのためで4にすればだいぶ改善されるかも知れません)。GUIにこだわる必要がないならターミナルでやった方がいいかも知れません。ターミナルからのやり方はここでは書きませんが「Getting Started with Raspberry Pi Pico 」”Chapter 6. Debegger with SWD”を参照してみてください。
既にGDBとOpenOCDがインストールされていると思うので後は実行するだけです。
終わり