プログラムを開発する際について回るものの一つにデバッグがあります。
Arduinoでは、printf デバッグ程度しか提供されていないのに対して、ESP-32ではソースレベルデバッグが可能ということです。
今回は、デバッグ環境を整えてみたいと思います。
デバッグに必要なもの
JTAG Debuggingに説明がありますが、次のソフトウェアやハードウェアが必要になります。
-
ターゲットに対応したGDB
ESP-IDFをインストールした際に同梱されています。
-
OpenOCD
今回インストールします。
-
JTAGアダプタ
今回はFT232HL ハイスピードUSBシリアル変換モジュールを使います。
-
ターゲットのESP-32
この他に、JTAGアダプタとターゲットをつなぐためにブレッドボードを用意しました。
ここでESP32-DevKitCをブレッドボードに刺す際には注意が必要です。次の写真を見てください。
通常の方法でESP32-DevKitCをブレッドボードに刺そうとすると配線ができません。そこで、
このように2つのブレッドボードを使って、配線のための穴を確保します。
それでは、デバッグ環境の構築を始めましょう。
OpenOCDをインストール
Set up OpenOCD for Windowsにあるようにインストール作業を進めます。
-
OpenOCDをダウンロードします。
-
GitHubから最新のOpenOCDをダウンロードします。
執筆時点では、v0.10.0-esp32-20180604 でした。
-
ダウンロードしたファイルを解凍します。
-
GitHubから最新のOpenOCDをダウンロードします。
-
解凍したOpenOCDをインストールします。
-
解凍して作成された
openocd-esp32
フォルダをC:¥msys32¥opt
フォルダにコピーします。
-
MSYS2環境のパスを通します。
-
C:¥msys32¥etc¥profile.d
フォルダにexport_ocd_path.sh
ファイルを作成します。
-
export_ocd_path.sh
ファイルに次の内容を記録します。
export PATH="$PATH:/opt/openocd-esp32/bin"
-
-
アダプターのクロックを設定します。
-
C:¥msys32¥opt¥openocd-esp32¥share¥openocd¥scripts¥interface¥ftdi¥um232h.cfg
ファイルに次の内容を追加します。
adapter_khz 2000
-
-
解凍して作成された
FT232HL のドライバをインストール
筆者の環境では、FT232HLをUSBケーブルでPCと接続すると、Windowsの標準のドライバがインストールされて仮想COMポートとして認識されました。
しかしこのままではJTAGの機能が使えないので、ドライバを置き換えます。
-
Zadigをダウンロードします。
Zadigサイトから最新のZadigをダウンロードします。
執筆時点では、Zadig 2.3 でした。
-
ダウンロードしたZadigを起動します。
Zadig-<バージョン>.exeを選択して起動します。
-
最新版を確認するかと聞かれているようですが、
No
を選択します。
-
[Options]-[List All Devices]を選択します。
-
Single RS232-HS
を選択します。
-
[Replace Driver]ボタンを押します。
-
[Close]ボタンを押します。
-
デバイスマネージャーを確認すると、シリアルポートが消えて、新たにユニバーサルシリアルバスデバイスが追加されています。
ESP32-DevKitCとFT232HLを接続
次のように接続します。
ESP32-DevKitCピン名 | FT232HLピン名 |
---|---|
IO12 | AD1 |
IO13 | AD0 |
IO14 | AD3 |
IO15 | AD2 |
GND | GND |
Eclipseにプラグインをインストール
Eclipseからデバッグを行う際には、GDB OpenOCD Debugging
プラグインを使います。
インストールされていない場合は、インストールします。
-
Eclipseを起動します。
-
[ヘルプ]-[Eclipseマーケットプレース]を選択します。
-
検索に
GNU MCU
と入力し、エンターキーを押します。
-
[インストール]ボタンを押します。
-
[GNU MCU C/C++ OpenOCD Debugging]を選択します。
-
[確認]ボタンを選択します。
-
[使用条件の条項に同意します]を選択します。
-
[完了]ボタンを選択します。
-
[インストール]ボタンを選択します。
-
[今すぐ再起動]ボタンを選択します。
Eclipseのデバッグ設定
プロジェクト毎にデバッグ設定を行います。
-
Eclipseを起動します。
-
プロジェクトを開きます。
-
[実行]-[デバッグの構成]を選択します。
-
[GDB OpenOCD Debugging]を選択します。
-
[新規]ボタンを押します。
-
必要に応じて[名前]を変更します。
-
[メイン]タブを選択します。
-
[C/C++ アプリケーション]に.elfファイルを入力(または参照して選択)します。
-
[自動でビルドを使用不可にします]を選択します。
-
[デバッガー]タブを選択します。
-
[実行可能ファイル・パス]に
C:¥msys32¥opt¥openocd-esp32¥bin¥openocd.exe
を入力(または参照して選択)します。
-
[Config options]に
-s C:¥msys32¥opt¥openocd-esp32¥share¥openocd¥scripts¥ -f interface¥ftdi¥um232h.cfg -f board¥esp-wroom-32.cfg
を入力します。
-
[実行可能ファイル名]に
C:¥msys32¥opt¥xtensa-esp32-elf¥bin¥xtensa-esp32-elf-gdb.exe
を入力(または参照して選択)します。
-
[始動]タブを選択します。
-
[Enable ARM semihosting]のチェックを外します。
-
[Load executable]のチェックを外します。
-
[Set breakpoint at]を
app_main
に変更します。
-
[適用]ボタンを押します。
-
[閉じる]ボタンを押します。
Eclipseでデバッグしてみる
それでは、Eclipseでデバッグをしてみたいと思います。
-
Eclipseのデバッガーを起動します。
-
app_main()
で、停止しました。
-
インスペクトもできます。
以上で、Eclipseからソースレベルデバッグができることがわかりました。
参考サイト
ESP32 を FT232H でつないで OpenOCD+GDBでデバッグ
ESP32をEclipse上でデバッグする