環境構築のおさらい
前回からだいぶ時間が空きました。
PC新調に伴い、環境再構築して、picoでもまた遊び始めました。
ninjaのインストール
上記の記事でcmakeまでは入っていると思います。
ここから追加の環境構築になります。
記事で紹介されていた方法では、どうしても私の場合安定してコンパイルできませんでした。
そこでmakeではなくninjaを使ってターミナルからコンパイルする方法に切り替えました。
wingetを使います。cmdにて下記を入力してninjaをインストールします。
winget install Ninja-build.Ninja
ninjaとmakeの違い
どちらもビルドコマンドですが、実態は大きく違います。
| 観点 | Make | Ninja |
|---|---|---|
| 設計思想 | 人間が読む/書くことも想定 | 機械が生成して実行する前提 |
| 入力ファイル | Makefile(手書きしがち) | build.ninja(基本は自動生成) |
| 速度 | 中〜高速(状況次第) | 高速 |
| 依存関係の扱い | 仕組みが古く、工夫が必要なことが多い | 依存グラフ実行に最適化されている |
| 並列ビルド |
-jで可能。ただしクセが出やすい |
並列前提で安定しやすい |
| 増分ビルド | ルール次第でムラが出る | 増分ビルドが得意で安定 |
| ログ表示 | 自由度高いがカオスになりがち | 必要最小限で見やすい(設定で詳細も可) |
コンパイル方法
cmake -G "Ninja" ..
意味として、ビルド用に初期化して、1つ上の CMake プロジェクトから Ninja 用の設計図を生成
以降はNinjaジェネレーターを使用してCMakeを実行します
以下のコマンドを使用します
- ビルド ninja
- クリーン ninja clean
- 再ビルド ninja clean && ninja
- 詳細出力 ninja -v
コンパイルが成功すると、elfやUF2が作成されます。
CMSIS-DAP経由でプログラム書き込み
bootを押しながら、USBを接続してUF2書き込みでもOKですが、今回はデバッグプローブを使います
CMSIS-DAPとは?
ARMが定めた デバッグ通信規格 です
正式名称:
Cortex Microcontroller Software Interface Standard - Debug Access Port のイニシャルをとってます
PCからSWD/JTAG経由でマイコンを制御するための通信仕様です
picoのデバッグプローブを使って書き込みます
OpenOCDとは?
Open On-Chip Debuggerのイニシャルです
stm32などを使っていた人には馴染みがあるんじゃないでしょうか?
CMSIS-DAP、ST-Link、J-Link などのデバッガを操作するための仲介ソフトです
これで書き込んだり、デバッグができます
書き込み用のスクリプト
以下のスクリプト flash.batを作成し、build直下に置きます
@echo off
rem === このバッチは build フォルダに置く想定 ===
cd /d "%~dp0"
"C:\Program Files\Raspberry Pi\Pico SDK v1.5.1\openocd\openocd.exe" ^
-s "C:\Program Files\Raspberry Pi\Pico SDK v1.5.1\openocd\scripts" ^
-f interface/cmsis-dap.cfg ^
-f target/rp2040.cfg ^
-c "adapter speed 5000" ^
-c "program hyb_blink.elf verify reset exit"
PSのターミナルから、以下で書き込みします
.\flash.bat
以上でitron+SDKでの開発環境が整いました。
おまけ:pico w でエラーが出た場合
私の環境ですが、最初にコンパイルした時にlwip関連のファイルがないエラーが発生しました。(wifiを使うプロジェクト)
vscodeのPSのターミナルより、以下を入力してgithubから追加のライブラリ(lwip関連)をダウンロードします。
- sdkフォルダに移動
cd "C:\Program Files\Raspberry Pi\Pico SDK v1.5.1"
- 追加ファイルをclone すればコンパイルが通ります
C:\Program Files\Raspberry Pi\Pico SDK v1.5.1> git clone -b sdk-1.5.1 https://github.com/raspberrypi/pico-extras.git
今日はここまで
