開発環境を考える(C/C++ SDK)
こんにちは、リゲル・インテリジェンスです。
RP2040のソフトウェア開発をArduino IDE環境で試してみたのですが、生成されるバイナリが大きいように感じた(私のArduinoの使い方がヘボなのかもしれませんが)のでC/C++ SDK + gcc-armの環境を構築して比較してみることにしました。
Arduino IDEアプリのインストール一発、に比べると多少手間ですが公式ガイドに従えば特に問題は無いかと思います。
資料は下記にまとまっています。
Raspberry Pi PicoとSeeed XIAO RP2040はハードウェアの違いはわずかで、
・Seeed XIAO RP2040は引き出しているポートの数が少ない(極小サイズですので)
・Seeed XIAO RP2040の方が搭載されているLEDが(なぜか)多い
・Raspberry Pi Picoには3.3Vレギュレータを外部から制御するためのピン有り
・Raspberry Pi PicoにはADC Vrefの入力ピン有り
といったあたりです。Raspberry Pi PicoでLEDが接続されているポート(GP25)は、Seeed XIAO RP2040でもLED(青)が接続されていますのでPico用のLチカサンプルなどはそのままXIAO RP2040でも使えます。
余談ですがSeeed XIAO RP2040のポート直結のLEDは3つ(青、緑、赤)あるのですが、マウント位置が近いというか一体型チップなので不要なLEDは消さないとどれが点いているのかわかりにくいです、特に青と緑。あと、シリアルコントロールのRGB LEDも載っていますがこれはほとんど使い途が無いような。。
私はMacBook Pro(M1)を使用していますので、公式資料( Getting started with Raspberry Pi Pico )のChapter 9.1の手順に従いビルドツール類をセットアップします。次にChapter 2.1の記述通りにSDKを準備したら、Chapter 3のLチカを試すことが出来るようになります。
公式資料にはVSCodeの導入に関しても記載がありますが、まずはコンソール(ターミナル)からビルドを行ってみるとわかりやすいかと思います。
今回使用したLチカをサンプルコードは下記になります。PICO_DEFAULT_LED_PIN =青、です。他の赤と緑は消すようにしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include "pico/stdlib.h" #define LedPinBlue 25 // output: the number of the LED pin of Blue #define LedPinGreen 16 // output: the number of the LED pin of Green #define LedPinRed 17 // output: the number of the LED pin of Red int main() { // GPIO initialization (LEDs on XIAO-RP2040 board) gpio_init(LedPinBlue); gpio_set_dir(LedPinBlue, GPIO_OUT); gpio_put(LedPinBlue, 1); gpio_init(LedPinGreen); gpio_set_dir(LedPinGreen, GPIO_OUT); gpio_put(LedPinGreen, 1); gpio_init(LedPinRed); gpio_set_dir(LedPinRed, GPIO_OUT); gpio_put(LedPinRed, 1); #ifndef PICO_DEFAULT_LED_PIN #warning blink example requires a board with a regular LED #else const uint LED_PIN = PICO_DEFAULT_LED_PIN; gpio_init(LED_PIN); gpio_set_dir(LED_PIN, GPIO_OUT); while (true) { gpio_put(LED_PIN, 1); sleep_ms(500); gpio_put(LED_PIN, 0); sleep_ms(500); } #endif } |
ビルド結果がこちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
MacBook-Pro:blink mato$ ll total 1096 drwxr-xr-x 12 mato admin 384 Sep 3 13:42 . drwxr-xr-x 27 mato admin 864 Sep 24 10:20 .. drwxr-xr-x 7 mato admin 224 Sep 3 13:42 CMakeFiles -rw-r--r-- 1 mato admin 110356 Sep 3 10:06 Makefile -rwxr-xr-x 1 mato admin 8256 Sep 3 13:42 blink.bin -rw-r--r-- 1 mato admin 150377 Sep 3 13:42 blink.dis -rwxr-xr-x 1 mato admin 30328 Sep 3 13:42 blink.elf -rw-r--r--@ 1 mato admin 202361 Sep 3 13:42 blink.elf.map -rw-r--r-- 1 mato admin 23284 Sep 3 13:42 blink.hex -rw-r--r-- 1 mato admin 16896 Sep 3 13:42 blink.uf2 -rw-r--r-- 1 mato admin 1165 Sep 3 10:06 cmake_install.cmake drwxr-xr-x 4 mato admin 128 Sep 3 09:57 elf2uf2 |
.binファイル(バイナリ)で8KB程、USB経由の書込み用.uf2ファイルで17KB弱といったところです。Aruduino IDEでは同様の処理で、
「最大2093056バイトのフラッシュメモリのうち、スケッチが58968バイト (2%) を使っています。」
でしたから比べると随分小さくなりました、たぶん。
今回、RP2040を組込む機器はバッテリー駆動のため消費電力は少しでも抑えたいと思います。生成されるコードの大きさへの懸念はありますが、Arduino環境とC/C++ SDKでどの程度まで設定できるのか比較してから、どちらの環境で開発するかを決めることにしました。
コメント