Anxinは開発経験を共有できます|JTAGデバッグはESP-C3シリーズモジュールで実現され、二次開発に便利です。

I.はじめに

コードにバグがある場合はどうすればよいですか?printfステートメントのみを使用してエラーを特定するには一定の制限があります。この記事では、JTAGデバッグ環境を構築し、ESP-C3の組み込みJTAGを使用する方法を紹介します。シングルステップのデバッグ、ブレークポイントの設定、スタックとスレッドの表示、およびその他のデバッグを実行します。

1.2準備

ハードウェアの準備:

  1. AnxinkeESP-C3シリーズモジュールと開発ボード
  2. 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などのさまざまな言語で記述されたプログラムのデバッグに使用できる広く使用されているデバッグツールです。次の機能を提供します。

  1. プログラムをダウンロードまたは開始します
  2. さまざまな特定の条件を設定してプログラムを停止します
  3. 汎用レジスタの値、メモリアドレスの値など、プロセッサの実行ステータスを表示します。
  4. 変数の値、関数の状態などを含む、プログラムの状態を表示します。
  5. 汎用レジスタの値、メモリアドレスの値など、プロセッサの動作状態を変更します。
  6. 変数の値、関数の状態などを含む、プログラムの状態を変更します。

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の一般的なデバッグコマンド

  1. stepおよびnextコマンド(sおよびと省略可能n)を使用してコードをステップ実行します。この2つの違いは、「step」コマンドを実行すると呼び出されたサブルーチンに入り、「next」コマンドを実行するとサブルーチンが単一のソースとして直接扱われることです。コードOK、あなたはそれを単一のステップで終わらせることができます

ここに画像の説明を挿入

  1. break M:行Mにブレークポイントを設定します。省略形b

  2. continue:実行を継続、速記c

  3. quit:GDBを終了します。q
    ここに画像の説明を挿入

  4. set:変数の値を設定します

  5. print:値とアドレスを出力、省略形p

  6. finish:現在の関数を終了し、関数呼び出しポイントに戻ります

  7. frame:関数のスタックフレームを切り替える、省略形f

  8. backtrace:関数呼び出しのスタックフレームと階層関係を表示します。bt

  9. display:特定の変数値を追跡および表示する

  10. delete breakpoints num:num番目のブレークポイントを削除します。省略形d

  11. info:関数内のローカル変数の値を表示します。省略形i

  12. frame:関数のスタックフレームを切り替える、省略形f

ここでは、JTAGデバッグ環境をすばやく構築する方法と最も簡単な例についてのみ説明します。詳細を知る必要がある場合は、公式ドキュメントに移動してください。何度か 読むことをお勧めします几天

お問い合わせ

公式ウェブサイト:https ://www.ai-thinker.com
DOCSの開発:https://docs.ai-thinker.com
公式フォーラム:http
://bbs.ai-thinker.comテクニカルサポート:support@aithinker。 com

おすすめ

転載: blog.csdn.net/Boantong_/article/details/121566671