ESP-Drone开源 Wi-Fi 无人机固件首次编译与错误排查

2022-09-21 10:50:12 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

文章更新版本

时间

备注

修订人

V0.1

2020.08.06

初始版本

bob

文章目录

    • 开源仓库地址
    • 编译成 ESP32-S2 固件
      • 1. ESP32-S2 环境搭建
      • 2. 设置编译目标
    • ESP32-S2 编译错误与解决方案
      • 1. 编译目标错误 This chip is ESP32-S2 not ESP32
      • 2. 未设置链接脚本 undefined reference to `_param_stop`
      • 3. 编译优化报错 outside array bounds of TCB_t * volatile[1]
    • 编译成 ESP32 固件
      • 1. ESP32 环境搭建
      • 2. 设置编译目标
    • ESP32 编译错误与解决方案
      • 1. 未设置链接脚本 undefined reference to `_param_stop`

开源仓库地址

ESP-Drone 原名 ESP-Plane

  • 代码仓库:esp-drone
  • 中文文档:getting started
  • 展示视频:安装与试飞

编译成 ESP32-S2 固件

1. ESP32-S2 环境搭建

全新安装 ESP-IDF 环境

目前(2020.08.06)乐鑫在 master 分支对 ESP32-S2 提供最新支持,因此必须使用 master 版本的 ESP-IDF

请严格按照开发环境搭建-ESP32S2-Latest,按步骤完成环境搭建工作:

已搭建其它 IDF 环境,如何进行切换?

  1. cd 进入 IDF 根目录
  2. 使用 git log 查看当前版本信息
  3. 使用 git fetch 拉取分支信息
  4. 使用 git checkout master 切换到 master
  5. 执行 install.sh 安装 master 版本的工具链
  6. 执行 git submodule update --init --recursive 更新子仓库

如果 Windows 中无法正常切换到 master,可以查看解决方案。

注意 Windows 中使用 .bat 代替 .sh,例如第 5 变为执行 install.bat安装 master 版本的工具链。

2. 设置编译目标

使用 idf.py set-target esp32s2 将编译目标切换为 esp32s2(默认为 esp32),如果中途切换编译目标,请将 build 目录和 sdkconfig sdkconfig.old 删除,重新 set-target

ESP32-S2 编译错误与解决方案

1. 编译目标错误 This chip is ESP32-S2 not ESP32

如果忘记通过 idf.py set-target esp32s2 将编译目标切换为esp32s2,会默认编译为esp32版本的固件,下载时会出现以下错误,请将 build目录和 sdkconfig sdkconfig.old 删除,重新 set-target

2. 未设置链接脚本 undefined reference to _param_stop

如果环境搭建之后未设置链接脚本,请参考ESP32/ESP32-S2链接脚本修改进行设置。

3. 编译优化报错 outside array bounds of TCB_t * volatile[1]

由于 ESP32-S2 为单核芯片,综合性能目前不如 ESP32,因此在项目配置sdkconfig.defaults 中默认开启了编译性能优化,该优化项打开后,会导致报错outside array bounds of TCB_t * volatile[1]

需要注意在 components/freertos/tasks.c 中函数taskYIELD_OTHER_CORE 第一行添加xCoreID = 0;

编译成 ESP32 固件

1. ESP32 环境搭建

全新安装 ESP-IDF 环境:请严格按照开发环境搭建-ESP32,按步骤完成环境搭建工作,ESP32 对 IDF 版本没有要求,可使用 master 也可使用4.0 及以上的 release 分支或4.0.1版本。

2. 设置编译目标

使用 idf.py set-target esp32 将编译目标切换为 esp32 (默认为 esp32)

如果中途切换编译目标,请将 build 目录和 sdkconfig sdkconfig.old 删除,重新 set-target

ESP32 编译错误与解决方案

1. 未设置链接脚本 undefined reference to _param_stop

如果环境搭建之后未设置链接脚本,请参考ESP32/ESP32-S2链接脚本修改进行设置。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/170575.html原文链接:https://javaforall.cn

0 人点赞