Arduino環境でRP2040搭載基板のデバッグを手軽にできるようになりました。
この記事では、RP2040デバッガーを使用してRaspberryPi PicoHをデバッグした方法を紹介します。
紹介するもの
Raspberry Piデバッグプローブ
特徴
接続 | パソコン側 : TypeB デバッグ対象 : JST SH1.0 3pin |
電源 | 5V USBから供給 |
CPU | RP2040 |
梱包物は
・本体
・USB MicroBケーブル
・デバッグ用ケーブル(JST SH1.0mm 3pin – JST SH1.0mm 3pin)
・デバッグ用ケーブル(JST SH1.0mm 3pin – ジャンパワイヤー オス)
・デバッグ用ケーブル(JST SH1.0mm 3pin – ジャンパワイヤー メス)
外観
使ってみた
実務でも様々な環境でデバッガを使ってきました。
開発ライセンスの必要な開発環境と比べるのはフェアではないですが、少し使いにくいです。
それでも素直にArduino環境のデバッガが無償で使用できるのはありがたいと思います。
どの環境のデバッガでも使いにくさはあり慣れが必要ですが、この環境ではRP2040基板でRP2040基板のデバッグをするために、ターゲットCOMポートが複数表示されてどちらがデバッガなのかよくわからなくなるところです。
そのために普段からデバッガを使い慣れて置く必要があり、デバッガうまく動かない調査に時間を使うのは本来目的から外れてしまうので、小さいプロジェクトでデバッガの配線、接続や環境設定、デバッグ操作を練習することが望ましいと思います。
軽めの実験や調査では使うことはほとんどありませんが、規模が大きくなって再現性の無い不具合や、ピンとこない不具合に出会ってしまうとデバッガの出番です。
条件文が増えてきた時にはステップ実行、計算結果が合わないときには変数ウォッチが役立ちます。
本記事のメインはRP2040デバッグプローブを使用していますが、RaspberryPi Picoもデバッグプローブとして使用できるので、後日追記します。
こんなデバッグプローブになるRP2040搭載基板もあります。
準備
使うもの
デバッグのターゲットはRaspberryPi PicoHで行います。
小型のRP2040開発基板ではSWDが無いもの基板もあるので、作業前に基板のSWDの確認をしてください。
絵 | 品名、型番 | 用途 |
---|---|---|
RP2040デバッグプローブ | ターゲットRP2040開発基板のデバッグをします。 | |
RaspberryPi PicoH | ピンヘッダ付きRaspberryPi Picoです。 SWDには、JST SH1.0mm 3pin コネクタが付いていて、 RP2040デバッグプローブ付属のケーブルを使用できます。 |
ケーブルの接続
基本的な構成は
パソコン <-> デバッグプローブ <-> RP2040開発基板
注意 : デバッグプローブのコネクタ(JST SH1.0mm 3Pin)は、ケースの奥まった位置にあります。半勘合(半挿し)により接触不良になりやすいので、しっかり奥まで差し込みます。
下図は、RaspberryPi PicoH に接続した構成です。
RaspberryPi PicoHにもUSBケーブルを接続していますが電源の供給のためです。
このためCOMポート番号が複数表示されるので、どちらがデバッグプローブなのかをあらかじめ確認する必要があります。
スケッチはデバッグ時はデバッグプローブを経由して書き込んでくれます。
デバッグプローブ | 配線 | RaspberryPi PicoH |
---|---|---|
USB (Dと書かれたコネクタ側) | JST SH1.0mm 3Pinケーブル | SWDコネクタ |
ライブラリ
ボードライブラリ
Arduino IDEのボードマネージャからRP2040用のライブラリのインストールとボードの選択をします。
追加のボードマネージャのURL | https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json |
検索 | RP2040 |
ボードライブラリ | Raspberry Pi RP2040 Boards(x.x.x)※ |
選択するボード | Raspberry Pi RP2040 Boards(x.x.x) > Raspberry Pi Pico |
バージョン | 3.3.2で動作することを確認しています。 3.4.1ではデバッグ動作できませんでした。 |
パラメータ
ツール > Upload Method > Picoprobe (CMSIS-DAP) を選択します。
デバッグの開始
書き込み
説明
サンプルに使用するスケッチは、実装LED(GPIO25)を点滅させます。
変数ウォッチを使うために点滅回数をカウントします。
スケッチ
int Counter = 0;
void setup() {
// put your setup code here, to run once:
pinMode(PIN_LED, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
while(1)
{
Counter ++;
digitalWrite(PIN_LED, HIGH);
digitalWrite(PIN_LED, LOW);
}
}
操作
①をクリックすることで、破線のデバッグメニューが表示されます。
②をクリックして、一度コンパイルします。
③デバッグ開始ボタンをクリックします。
普段書き込みに使用する書き込みボタン[→]を使用すると、スケッチの書き込み後スケッチの動作を始めます。
このボタンからはデバッグ動作をできません。
デバッグ動作では画面下部が橙になります。
デバッグが開始されると直ちにスケッチが実行されるので、開始個所からステップ動作させたい場合はsetup()関数の最初に実行される処理にブレークポイントを設定します。
矢印の箇所の赤丸がブレークポイントです。
赤破線箇所をクリックすると任意の行で処理を停止させることができます。
デバッグ動作後のプログラムカウンタの操作を記載します。
続行 | 一時停止の状態からスケッチを動作させます。 続行ボタンのクリック後は一時停止ボタンに変化します。 | |
一時停止 | 動作中のスケッチを一時停止させます。 クリックしたタイミングで停止するので、スケッチのどこで停止するかはわかりません。 一時停止ボタンのクリック後は続行ボタンに変化します。 | |
ステップオーバー | 現在一時停止している位置から、1ステップ実行します。 実行するステップが関数の場合、関数の内容を含めて1ステップとします。 | |
ステップイン | 現在一時停止している位置から、1ステップ実行します。 実行するステップが関数の場合、関数の内部にジャンプします。 | |
ステップアウト | 現在停止している位置から、現在の関数が終了する位置まで実行します。 | |
再起動 | スケッチを最初から実行します。 | |
停止 | スケッチを完全に止めます。 止めた位置から続きはできません。 |
これらの機能を使って効率的なデバッグをするのはカンコツが必要です。
ステップインやステップオーバーで細かく実行すると時間がかかり、目押しで一時停止しても肝心な現象箇所をとらえられなかったりするので、現象から予測をたててブレークポイントを設定しながら作業するコツをつかむ練習が必要です。
ウォッチ式
実行中の変数値を確認することができます。
ウォッチ式を使用するためには、ウォッチ式への変数の登録を行います。
①ウォッチ式の[ + ] ボタンをクリックします。
②式の編集ボックスが表示されるので、モニタしたい変数名を入力します。
③OKをクリックします。
ウォッチ式の一覧にCounter変数が追加されます。
ウォッチ式で変数の値を確認するためには、スケッチを一時停止させます。
サンプルプログラムの14行目にブレークポイントを設定した状態でデバッグを開始します。
デバッグ動作が開始されると、Setup()関数を実行したのち、loop()関数が実行されます。
14行目のブレークポイントでスケッチは一時停止状態になります。
その時のCounter変数の値は1です。
直前の13行目でインクリメントされたためです。
続行ボタンをクリックするとwhile()文を1周して14行目で停止します。
その時のCounter変数の値はさらに加算されて2に変化したことがわかります。
コメント