記事ディレクトリ
I.はじめに
コードにバグがある場合はどうすればよいですか?printfステートメントのみを使用してエラーを特定するには一定の制限があります。この記事では、JTAGデバッグ環境を構築し、ESP-C3の組み込みJTAGを使用する方法を紹介します。シングルステップのデバッグ、ブレークポイントの設定、スタックとスレッドの表示、およびその他のデバッグを実行します。
1.2準備
ハードウェアの準備:
- AnxinkeESP-C3シリーズモジュールと開発ボード
- USBケーブル、USBアダプターボード
ソフトウェアの準備:
ESP-IDF開発環境をセットアップし、構築チュートリアルについては前のブログ投稿を参照してくださいhttps://aithinker.blog.csdn.net/article/details/121565113
配線の準備:
ESP32-C3チップにはフルスピードUSBシリアルポート/ JTAGコントローラーが内蔵されています。配線は次のとおりです。コンピューター
に接続した後、USBJTAGポートを仮想マシンに接続し
ます。USBJTAGデバイスが接続できない場合コンピューターにある場合は、ドライバーをインストールする必要があります
。Windowsをダウンロードしてesp-idfツールインストーラー
を実行します。ドライバーを選択し
ます。インストールが成功したら、コンピューターを再起動します。ドライバーをインストールすると、USBJTAGデバイスが見つかります。仮想マシンに接続します。
2.OpenOCDをインストールして実行します
2.1OpenOCDの概要
OpenOCDは、PC上で実行されるオープンソースのデバッグソフトウェアであり、多くのJTAGハードウェアを制御できます。これは、一種のGDBサービスプログラムとして理解できます。もともとは大学在学中に仲間のドミニク・ラスが始めたプロジェクト(2005)でした。OpenOCDは、組み込みデバイスのデバッグ、インシステムプログラミング、およびバウンダリスキャン機能を提供するように設計されています。OpenOCDの機能は、デバッグターゲットに電気信号を提供できる小さなハードウェアユニットであるエミュレーターを使用して実行されます。デバッグホスト(OpenOCDを実行しているホスト)には通常、この電気信号を直接解析する機能がないため、エミュレーターが必要です。
2.2OpenOCDをインストールする
ESP-IDF v4.0以降でinstall.shインストールスクリプトを実行すると、openocdがデフォルトでインストールされます
检查安装版本
openocd --version
端末は次の情報を出力します(実際のバージョン番号は更新される場合があります)。
Open On-Chip Debugger v0.10.0-esp32-20210902 (2021-09-02-09:38)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
检查 OPENOCD_SCRIPTS 环境变量的值,以确认 OpenOCD 配置文件的路径
ESP-IDFディレクトリに移動し、../ export.shを実行して、$OPENOCD_SCRIPTSをエコーします。
cd esp-idf
. ./export.sh
echo $OPENOCD_SCRIPTS
echo $ OPENOCD_SCRIPTSは、OpenOCDパスを出力します
~/.espressif/tools/openocd-esp32/v0.10.0-esp32-20210902/openocd-esp32/share/openocd/scripts
openocdはusbを使用する必要があり、〜/ .espressif / tools / openocd-esp32 / v0.10.0-esp32-20210902 / openocd-esp32 / share / openocd / contrib / contrib / 60-openocd.rulesを変更する必要があります(実際のパス))/ etc / udev / rules.dに移動します。これにより、openocdはusbを使用してデバイスをデバッグする権限を持ちます。
cd ~/.espressif/tools/openocd-esp32/v0.10.0-esp32-20210902/openocd-esp32/share/openocd/contrib/contrib
sudo cp 60-openocd.rules /etc/udev/rules.d
デバッグするプロジェクトディレクトリを入力し、examples / get-started/blinkを例として取り上げます
cd $IDF_PATH/examples/get-started/blink
禁用内存保护
2021-11-26までは、GDBを正常に実行するには、メモリ保護を無効にする必要があります。idf.pymenuconfigを実行し、コンポーネント構成→ESPシステム設定→メモリ保護でメモリ保護を無効にして、コンポーネント構成→ESPシステム設定→チャネルで設定します
。
把日志输出到USB(可选)
コンソール出力用
编译烧录固件
idf.py build flash monitor
运行openocd
openocd -f board/esp32c3-builtin.cfg
次の図に示すように、操作は成功します。
3.GBDをインストールして実行します
3.1GBDの概要
GDB(GNU Project Debugger)は、GNUツールチェーンのデバッグソフトウェアです。GDBは、C、C ++、Adaなどのさまざまな言語で記述されたプログラムのデバッグに使用できる広く使用されているデバッグツールです。次の機能を提供します。
- プログラムをダウンロードまたは開始します
- さまざまな特定の条件を設定してプログラムを停止します
- 汎用レジスタの値、メモリアドレスの値など、プロセッサの実行ステータスを表示します。
- 変数の値、関数の状態などを含む、プログラムの状態を表示します。
- 汎用レジスタの値、メモリアドレスの値など、プロセッサの動作状態を変更します。
- 変数の値、関数の状態などを含む、プログラムの状態を変更します。
GDBは、ホストPCのLinuxシステムで実行中のプログラムのデバッグに使用でき、組み込みハードウェアのデバッグにも使用できます。組み込みハードウェアの環境では、リソースが限られているため、一般的な組み込みターゲットハードウェアはGDBを直接ビルドできません。デバッグ現時点では、環境(ディスプレイ画面やLinuxシステムなど)では、GDB + GdbServerでリモートデバッグを実行できます。一般的に、GdbServerはターゲットハードウェアで実行され、GDBはホストPCで実行されます。
3.2GBDの実行
python2、libpython2.7をインストールします
sudo apt install python2
sudo apt install libpython2.7
新しいターミナルセッションを開き、デバッグするプロジェクトディレクトリに移動します。次に例を示します。
cd esp-idf
. ./export.sh
cd examples/get-started/blink
デバッガーを起動するときは、通常、いくつかの構成パラメーターとコマンドを指定する必要があります。コマンドラインでこれらのコマンドを1行ずつ入力しないようにするには、新しい構成ファイルを作成して、gdbinitという名前を付けます。
target remote :3333
set remote hardware-watchpoint-limit 2
mon reset halt
flushregs
thb app_main
c
このファイルを現在のディレクトリに保存します。
gdbinitファイルの内部の詳細については、「デバッガの起動コマンドの意味」の章を参照してください。
GDBを起動します。起動する前に、openocd -f board/esp32c3-builtin.cfgが実行されていることを確認してください
idf.py gdbtui
Enterキーを押してプログラムに入り
ます。ここでJTAGデバッグが実行されました。合計3つの端末を開きました。1つはシリアルポートログを表示するためにidf.pyモニターを実行し、1つはopenocd -f board / esp32c3-builtin.cfgを実行し、1つはidf.py gdbtuiを実行し、3つの端末はデバッグに協力します。
3.3GDBの一般的なデバッグコマンド
step
およびnext
コマンド(s
およびと省略可能n
)を使用してコードをステップ実行します。この2つの違いは、「step」コマンドを実行すると呼び出されたサブルーチンに入り、「next」コマンドを実行するとサブルーチンが単一のソースとして直接扱われることです。コードOK、あなたはそれを単一のステップで終わらせることができます
-
break M
:行Mにブレークポイントを設定します。省略形b
-
continue
:実行を継続、速記c
-
quit
:GDBを終了します。q
-
set
:変数の値を設定します -
print
:値とアドレスを出力、省略形p
-
finish
:現在の関数を終了し、関数呼び出しポイントに戻ります -
frame
:関数のスタックフレームを切り替える、省略形f
-
backtrace
:関数呼び出しのスタックフレームと階層関係を表示します。bt
-
display
:特定の変数値を追跡および表示する -
delete breakpoints num
:num番目のブレークポイントを削除します。省略形d
-
info
:関数内のローカル変数の値を表示します。省略形i
-
frame
:関数のスタックフレームを切り替える、省略形f
ここでは、JTAGデバッグ環境をすばやく構築する方法と最も簡単な例についてのみ説明します。詳細を知る必要がある場合は、公式ドキュメントに移動してください。何度か 読むことをお勧めします几天
。
お問い合わせ
公式ウェブサイト:https ://www.ai-thinker.com
DOCSの開発:https://docs.ai-thinker.com
公式フォーラム:http
://bbs.ai-thinker.comテクニカルサポート:support@aithinker。 com