VSCode拡張機能`Raspberry Pi Pico`の中身
前回、VSCode拡張機能Raspberry Pi Pico
を使って楽に開発できるようになった投稿をしました。
そもそも、Pico向けのC/C++開発は、どういう構成で開発させているのかを、自分メモとしても残しておきます。
Raspberry Pi Pico
が裏でやっていること
VSCode拡張機能コンソールに出力されている内容をみると、拡張機能をインストールすると以下に一式必要なファイルやモジュールをDLします。
%USERPROFILE%\.pico-sdk
.pico-sdkの内容は以下のとおり。
ツール | 内容 |
---|---|
cmake | Picoのプログラム構成を定義してそこからMakefileを生成するツール。 |
examples | サンプル。https://github.com/raspberrypi/pico-examples.git がクローン |
ninja | cmakeのジェネレータ。Windows版だとninjaが使われている。 |
openocd | OpenOCD (Open On-Chip Debugger) は、組み込みシステムのデバッグやプログラムのフラッシュに使われるオープンソースのデバッグツール。 |
picotool | https://github.com/raspberrypi/picotool のリリース2.0.0をDLしている。 |
python | cmakeで使われるPython確認時では、3.12.1がコピーされている。 |
sdk | バージョンフォルダ配下に、pico-sdkの本体がhttps://github.com/raspberrypi/pico-sdk.gitがクローンされている。 |
toolchain | Arm GNU Toolchainで、確認時は13_2_Rel1で、多分ここから https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads/13-2-rel1 ダウンロードされている。 |
tools | 確認時はpioasm.exeのみ。PIO用のアセンブリコードをバイナリ形式に変換するためのツールらしい。 |
で、上記の場所は、VSCodeの変数${userHome}でユーザプロファイルの場所を起点として、以下のようにツールの場所を特定している。
${userHome}/.pico-sdk/toolchain/13_2_Rel1/bin/arm-none-eabi-gcc.exe
${userHome}/.pico-sdk/openocd/0.12.0+dev/openocd.exe
${userHome}/.pico-sdk/cmake/v3.28.6/bin/cmake
${env:HOME}/.pico-sdk/picotool/2.0.0/picotool/picotool
ちなみに、この拡張機能は下図のようにC/C++開発によく使われるほかの拡張機能に依存してます。
開発の流れ
英語版の最新PDFには、拡張機能使う前提なのか、手動でファイルを作成する手順がなくなってます。日本語版の古い情報にはかろうじて残っていて、この拡張機能がその手順を自動化している感じで動作してます。
第章 8. プロジェクトを作成するのところを参照。概ねこの流れを簡単にやれるようになっているわけです。
前提
- 上記のツール類がそろっていて、パスが特定できている。
- pico-sdkやpico-examplesを入手済み
プロジェクトの作成
- プロジェクト用のフォルダを作成してソースをコピーする
- CMakeLists.txtをソースと同じ場所に作成して、必要な構成を定義する
- SDKを使えるようにするpico_sdk_import.cmakeファイルをSDKからコピーして持ってくる
project
├ test.c
├ CMakeLists.txt
└ pico_sdk_import.cmake
- CMakeLists.txtをもとに、cmakeを実行して、ninja向けのビルド用ファイルをbuildフォルダ以下に生成する
- ninjaを実行してモジュール類(*.uf2, *.elf)を作成する
> cd project
> mkdir build
> cd build
> cmake -G Ninja ..
> ninja
> ls *.uf2 *.elf
blink.elf* blink.uf2*
OpenOCDを使ってデバッグ
実際のパラメータはもっと多いですが、概ね以下と同じことしてます。これで、OpenOCDを裏でターミナル上で起動します。
> openocd -f interface/cmsis-dap.cfg -f target/rp2040.cfg -s tcl \
-c "adapter speed 5000"
起動したOpenOCDに対して、デバッグするblink.elfをアタッチする。
> arm-none-eabi-gdb.exe blink.elf
日本語版PDFの6.3. GDB と OpenOCD を使用して Hello World プログラムをデバッグするあたりを参照。これでブレークポイントを付与したり、ステップ実行できるようになります。
OpenOCDを使って、Picoにフラッシュする
実際のパラメータは微妙に違いますが、概ね以下と同じことしてます。
> openocd -f interface/cmsis-dap.cfg -f target/rp2040.cfg \
-c "program blink.elf verify reset exit"
VSCodeの設定
プロジェクト毎に.vscodeフォルダを作成して設定を定義します。
.vscodeファイル | 内容 |
---|---|
c_cpp_properties.json | C/C++拡張機能を使った設定で、コンパイラのパラメータやパスを定義 |
cmake-kits.json | ?? |
extensions.json | ?? |
launch.json | デバッグ実行時に利用するOpenOCD向けの起動設定 |
settings.json | ターミナル、cmake、本拡張機能向けのパスの設定 |
tasks.json | Compile Project、Run Project、Flashのコマンド設定 |
中身を見ると、プロジェクト毎の固有の設定がないので、新規作成したプロジェクトのこれらのファイルはみんな同じかもしれない?と思います。
これらも、この拡張機能がなかったときは、PDFマニュアル等を参考にして自分で作成していました。私はデバッグ実行方法が分からなくて、結構時間を費やしてました。
Discussion