🔨

RasPi Pico2のプログラムをCMakeでビルドする

2024/08/10に公開

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