ESP32的开发方式如下图所示:
下载代码:
mkdir -p ~/esp
cd ~/esp
git clone --recursive https://github.com/espressif/esp-idf.git
ESP-IDF会被下载到~/esp/esp-idf
安装工具链:
安装工具链,debugger, openocd,python包等等,默认安装在$HOME/.espressif
目录.
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就是社区开发的在ESP32上利用DSP指令实现加速的算法库。支持FIR,IIR,点乘,矩阵乘法等等算法接口。
下载代码,进入demo项目:
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虽然基于同样的base ISA, 单扩展配置方面还是存在很大差异的。
CONFIG_FREERTOS_BREAK_ON_SCHEDULER_START_JTAG机制:
据说是为了解决一个BUG, ESP32引入了第一次调度的入口任务处加了一个断点,实现流程为:
运行时插入了一个断点,调用的是espidf提供的闭源库函数,所以用jlink调试时会发现一开始断了一下,需要重新启动运行pass 断点。