RasPi Pico2のプログラムをCMakeでビルドする
RaspberryPi Pico 2が発表になりました。
このボード向けのC++プログラムをビルドしてみたので、C/C++でRasPi Picoのプログラムを書いている人のために勘所を書いておきます。
RasPi Pico 2とRP2350
先代のRaspberry Pi Picoと同サイズのこの基板の最大の特徴はSoCマイコンがRP2040から新型のRP2350にアップグレードされ、内部SRAMが増量されたことです。
項目 | RP2040 | RP2350 |
---|---|---|
CPU | Cortex-M0+ | Cortex-M33 |
FPU | 無 | 有 |
クロック周波数 | 133MHz | 150MHz |
SRAM | 264kB | 520kB |
デュアルコアCPUであることは先代と変わりません。ピン配置や内蔵IOはRP2040に対して後方互換性があるようです。
このほかにCortex-M33と排他利用できるデュアルRISC-Vコアが実装されていますが、こちらはRV32I構成でありFPUが無いためRISC-Vを目的とする人以外には魅力はなさそうです。
CMakeのオプション
RasPi Pico2とRP2350の発表に伴い、Raspberry Pi Pico SDKがv2.0.0にアップグレードされました。目玉はRP2350対応です。
つまり、ひとつのSDKが二つのCPUアーキテクチャに対応します。
- RasPi Pico / RP2040
- RasPi Pico 2 / RP2350
CMakeを使ってRasPi Pico / Pico2用のC++プログラムを作る場合、ターゲットの切り替えはコンフィギュレーション時にCMakeへの引数の指定によって行います。
RasPi Pico2をターゲットにする場合、CMakeには以下の引数を与えてください。
cmake -DPICO_PLATFORM=rp2350 -DPICO_BOARD=pico2 ...
この変更だけで、実行ファイルのターゲットはRasPi Pico2になります。
これらの引数はコンパイル時マクロの宣言です。宣言されるマクロとその値は以下の通りです。
マクロ | RasPi Pico | RasPi Pico W | RasPi Pico2 |
---|---|---|---|
PICO_PLATFORM | rp2040 | rp2040 | rp2350 |
PICO_BOARD | pico | pico_w | pico2 |
マクロを宣言しない場合には、PICO_PLATFORMはrp2040, PICO_BOARDはpicoになります。つまり、RasPi Picoがターゲットになります。
VS Codeによるビルド
VS CodeでCMakeのコンフィギュレーションを行う場合にはVS Codeの設定画面で上記引数を指定します(前提としてCMake Tools機能拡張がVS Codeにインストールされていることとします)。
ワークスペースの設定に移り、CMake:Configure Argsに上記のコマンドライン引数を追加します。
-DPICO_PLATFORM=rp2350
-DPICO_BOARD=pico2
まとめ
この文書を書いている時点で、RasPi Pico2は日本国内で発売されていません。したがって、手元ではビルドしか確認していない点に注意してください。
RasPi Pico / Pico2 はピン互換ですのでRasPi Pico用に作ったC++プログラムはCMake引数を変えるだけで容易にPico2に移植できそうです。
追記:ターゲットを変更する場合
上記の方法でターゲットを指定できますが、ターゲットを変更する場合はbuildディレクトリを削除してください。削除しない場合、正常にビルドできるように見えますが正しく実行しないです。少なくとも私の手元では正しく実行しません。
Discussion