ESP32の開発方法を下図に示します。
ダウンロードコード:
mkdir -p ~/esp
cd ~/esp
git clone --recursive https://github.com/espressif/esp-idf.git
ESP-IDFはにダウンロードされます~/esp/esp-idf
ツールチェーンをインストールします。
デフォルトで$HOME/.espressif
ディレクトリにインストールされているツールチェーン、デバッガ、openocd、pythonパッケージなどをインストールします。
cd ~/esp/esp-idf
./install.sh
パッケージカタログをダウンロードする
インストール後のツールチェーンディレクトリ:
環境変数を構成します。
. $HOME/esp/esp-idf/export.sh
alias get_idf='. $HOME/esp/esp-idf/export.sh'
source ~/.bashrc
プロジェクトを作成します。
helloworldプロジェクトを作成する
cd ~/esp
cp -r $IDF_PATH/examples/get-started/hello_world .
構成とコンパイル:
cd ~/esp/hello_world
idf.py set-target esp32
idf.py menuconfig
idf.py set-target esp32
idf.py menuconfig
デフォルト設定を保存します
コンパイル:
idf.py build
生成されたオブジェクトファイル
逆コンパイル:
xtensa-esp32-elf-objdump -d build/hello-world.elf >e.dis
esp-dspプロジェクトのコンパイル:
ESP32は、去勢されたDSPユニットを備えたHIFIプロセッサとして理解できます。本質的にDSPではありませんが、HIFIシリーズと同じBase ISAを使用します。ESP-DSPは、DSP命令を使用して実現するコミュニティ開発のアルゴリズムライブラリです。 ESP32での加速。FIR、IIR、ドット乗算、行列乗算、およびその他のアルゴリズムインターフェイスをサポートします。
コードをダウンロードして、デモプロジェクトに入ります。
cd ~/esp
git clone https://github.com/espressif/esp-dsp.git
cd esp-dsp/examples/dotprod
コンパイル:
idf.py build
ターゲットファイルを取得します。
binutilsツールを使用してターゲットファイルを分析できます!
ツールチェーンの検証:
公式のxtensaツールチェーンxt-objdumpを使用してhello_world.elfを逆コンパイルします。これは成功する可能性があり、espとhifiが同じISAアーキテクチャであることをさらに示しています。
しかし、問題が見つかりました。xt-objdumpが正しいアセンブリ命令を逆コンパイルせず、逆コンパイル後の関数の出力が裸の命令コードです。ESP32とHIFIは同じベースISAに基づいていますが、それでも大きな違いがあるようです。単一拡張構成の場合。
CONFIG_FREERTOS_BREAK_ON_SCHEDULER_START_JTAG机制:
バグを解決するために、ESP32は初めてスケジュールされたエントリータスクにブレークポイントを導入したと言われています。実装プロセスは次のとおりです。
実行時にブレークポイントが挿入され、espidfが提供するクローズドソースライブラリ関数が呼び出されます。したがって、jlinkでデバッグする場合、最初にブレークポイントが壊れていることがわかり、パスブレークポイントを再起動する必要があります。