大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
摘要
ESP32-Drone四旋翼无人机是乐鑫的一个开源项目,我根据官方的硬件参考设计,重新使用KiCAD绘制了原理图和PCB板,并制作了控制板样板,在配置了ESP-idf-4.4编程环境编译官方的软件包时遇到了二个比较严重的问题,具体过程记录如下:
编译问题1:找不到FreeRTOS.h头文件。
如图1-1所示,在编译的过程中,发现报没有找到FreeRTOS.h头文件,这应该是C语言程序编译过程中常见的头文件目录环境变量的设置有问题 。
如图1-2所示,根据报错信息的提示,找到“crazyfile”组件所在的目录,打开“Cmakelists.txt”文件,查找跟FreeRTOS有关的内容。
图1-3所示,在“Cmakelists.txt”中已经有查找“FreeRTOS”头文件目录,并设置“FREERTOS_ORIG_INCLUDE_PATH”路径的内容,按理说不应该再报跟“FreeRTOS”操作系统有关的错误。
考虑到我下载的软件包ESP-IDF可能与ESP-Drone项目所使用的版本可能不一致的缘故,打算修改“Cmakelists.txt”文件手动加入FreeRTOS的头文件目录进行一下测试。
如图1-4所示,在“Cmakelists.txt”文件中加入如下的语句:
set(FREERTOS_ORIG_INCLUDE_PATH “d:/esp-idf/components/freertos/FreeRTOS-Kernel/include/freertos”)
然后进行了测试,发现报错现象消失了,这进一步验证了前面的判断是真确的,至于执行以下语句:
idf_component_get_property( FREERTOS_ORIG_INCLUDE_PATH freertos ORIG_INCLUDE_PATH )
后,为什么没有能够正确设置“FreeRTOS”头文件路径,待后续有时间再进行查证。
编译问题2:_无法定位log_start、log_stop等函数入口
如图2-1所示,编译编译代码时发现错误,具体如下:
undefined reference to `_log_start’
undefined reference to `_log_stop’
undefined reference to `_param_start’
undefined reference to `_param_stop’
根据上述报错信息,上网查询,发现以下网址有关于此报错信息的解决方法:搭建开发环境 — ESP-Drone 文档
访问上述网址后,提示说要在文件”esp32s2.project.ld.in”中添加以下的内容。
可在我的ESP-IDF软件目录中并没有找到“esp32s2.project.ld.in”文件,考虑到ESP-IDF版本的问题,猜测是文件被改了名字,经过检索发现在目录“D:\esp-idf\components\esp_system\ld\esp32s2”有二个跟系统软件链接定位有关的文件“memory.ld.in”、”sections.ld.in”。
如图2-2所示,打开文件“sections.ld.in”,可找到.flash.rodata 段的信息, 在末尾添加以下代码:
/* Parameters and log system data */ _param_start = .; KEEP(*(.param)) KEEP(*(.param.*)) _param_stop = .; . = ALIGN(4); _log_start = .; KEEP(*(.log)) KEEP(*(.log.*)) _log_stop = .; . = ALIGN(4); |
然后删除软件工程目录下的“build”目录,“sdkconfig”文件,再运行“idf.py set-target esp32s2”命令重新配置目标处理器,之后运行“idf.py build”发现此编译问题已经解决。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/170580.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...