当前位置: 首页 > news >正文

ESP32编译及运行错误记录

1、打印格式不对

一般都是因为日志中某个参数打印格式不匹配造成。

ESP_LOGI(TAG, "[APP] Free memory: %lu bytes", esp_get_free_heap_size());//将之前的%d 改为%lu

2、配置载不对 这里选择了蓝牙模块需要引入蓝牙组件才能编译通过

  1. idf.py menuconfig Component config –> Bluebooth –> 消除使能 不添加蓝牙模块直接编译

3、未加载到blufi配网的功能函数,这里我在使用nimble模块后打开blufi功能编译

in function `example_event_callback':
/home/huqin/code/GS368/build/../components/sit_lib_network/src/sit_lib_network.c:275: undefined reference to `esp_blufi_adv_start'
/home/huqin/.espressif/tools/riscv32-esp-elf/esp-2022r1-11.2.0/riscv32-esp-elf/bin/../lib/gcc/riscv32-esp-elf/11.2.0/../../../../riscv32-esp-elf/bin/ld: /home/huqin/code/GS368/build/../components/sit_lib_network/src/sit_lib_network.c:312: undefined reference to `esp_blufi_send_wifi_conn_report'
/home/huqin/.espressif/tools/riscv32-esp-elf/esp-2022r1-11.2.0/riscv32-esp-elf/bin/../lib/gcc/riscv32-esp-elf/11.2.0/../../../../riscv32-esp-elf/bin/ld: /home/huqin/code/GS368/build/../components/sit_lib_network/src/sit_lib_network.c:255: undefined reference to `esp_blufi_send_error_info'
/home/huqin/.espressif/tools/riscv32-esp-elf/esp-2022r1-11.2.0/riscv32-esp-elf/bin/../lib/gcc/riscv32-esp-elf/11.2.0/../../../../riscv32-esp-elf/bin/ld: /home/huqin/code/GS368/build/../components/sit_lib_network/src/sit_lib_network.c:257: undefined reference to `esp_blufi_adv_start'
/home/huqin/.espressif/tools/riscv32-esp-elf/esp-2022r1-11.2.0/riscv32-esp-elf/bin/../lib/gcc/riscv32-esp-elf/11.2.0/../../../../riscv32-esp-elf/bin/ld: /home/huqin/code/GS368/build/../components/sit_lib_network/src/sit_lib_network.c:265: undefined reference to `esp_blufi_adv_stop'
/home/huqin/.espressif/tools/riscv32-esp-elf/esp-2022r1-11.2.0/riscv32-esp-elf/bin/../lib/gcc/riscv32-esp-elf/11.2.0/../../../../riscv32-esp-elf/bin/ld: /home/huqin/code/GS368/build/../components/sit_lib_network/src/sit_lib_network.c:265: undefined reference to `esp_blufi_send_custom_data'
/home/huqin/.espressif/tools/riscv32-esp-elf/esp-2022r1-11.2.0/riscv32-esp-elf/bin/../lib/gcc/riscv32-esp-elf/11.2.0/../../../../riscv32-esp-elf/bin/ld: /home/huqin/code/GS368/build/../components/sit_lib_network/src/sit_lib_network.c:291: undefined reference to `esp_blufi_send_error_info'
/home/huqin/.espressif/tools/riscv32-esp-elf/esp-2022r1-11.2.0/riscv32-esp-elf/bin/../lib/gcc/riscv32-esp-elf/11.2.0/../../../../riscv32-esp-elf/bin/ld: /home/huqin/code/GS368/build/../components/sit_lib_network/src/sit_lib_network.c:306: undefined reference to `esp_blufi_send_wifi_conn_report'
/home/huqin/.espressif/tools/riscv32-esp-elf/esp-2022r1-11.2.0/riscv32-esp-elf/bin/../lib/gcc/riscv32-esp-elf/11.2.0/../../../../riscv32-esp-elf/bin/ld: /home/huqin/code/GS368/build/../components/sit_lib_network/src/sit_lib_network.c:310: undefined reference to `esp_blufi_send_wifi_conn_report'

找不到组件库文件。

于子模块添加组件库(试过在主函数cmake中添加依然找不到)一般都是缺啥头文件找到IDF中对应的组件库添加进来即可。

df_component_register(SRCS "${component_srcs}"INCLUDE_DIRS "." "include"PRIV_INCLUDE_DIRS ""PRIV_REQUIRES ""REQUIRES  "mbedtls" #添加组件库"fatfs" "nvs_flash" "app_update" "bt" "esp_wifi" "freertos" "json" "esp_http_client" "app_update"  "lwip" "esp_netif" "esp_https_ota")

出现:若编译出现函数声明找不到可以查看对应头文件是否被宏隔断 一般需要通过配置使能宏才可以使用函数

经测试发现因为配置中未开放此宏导致函数声明找不到。

修改menuconfig后重新编译成功 如下:

4、函数冲突

../user/wifi/blufi_connect.c:391:9: error: implicit declaration of function 'blufiprph_advertise'; did you mean 'bleprph_advertise'? [-Werror=implicit-function-declaration]391 |         blufiprph_advertise();|         ^~~~~~~~~~~~~~~~~~~|         bleprph_advertise
../user/wifi/blufi_connect.c: At top level:
../user/wifi/blufi_connect.c:674:1: warning: conflicting types for 'blufiprph_advertise'; have 'void(void)'674 | blufiprph_advertise(void)| ^~~~~~~~~~~~~~~~~~~
../user/wifi/blufi_connect.c:674:1: error: static declaration of 'blufiprph_advertise' follows non-static declaration
../user/wifi/blufi_connect.c:391:9: note: previous implicit declaration of 'blufiprph_advertise' with type 'void(void)'391 |         blufiprph_advertise();|         ^~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors

跟组件中包含的函数冲突,修改函数名后未声明。

5、BLUFI_CUSTOM_DATA 结构体未定义,当时未使用typedef重命名导致找不到。

/user/wifi/blufi_connect.c:668:22: error: expected declaration specifiers or '...' before 'BLUFI_CUSTOM_DATA'

6、OTA固件升级错误 由于使用https下载未加证书验证导致服务器配置不对下载失败。

I (21099) advanced_https_ota_example: Starting Advanced OTA example
I (21109) advanced_https_ota_example: OTA started
E (21119) esp_https_ota: No option for server verification is enabled in esp_http_client config.
E (21129) advanced_https_ota_example: ESP HTTPS OTA Begin failed

7、snprintf入参指针类型不对, 修改uint8_t*改为 char*。

pointer targets in passing argument 1 of 'snprintf' differ in signedness

8、multiple definition of `device_data';多重定义问题

根本原因:由于结构体对象存在多个导致,(我这里因为在头文件中使用结构体类型定义对象,并头文件被多个模块包含,导致存在多个全局对象)

修改:对象定义在对于的源文件中,在其他文件中使用extern 访问对象。

9.undefined reference to `vTaskList'

原因:未找到函数 没有配置需要按照如下设置。

10、重复定义 在一个头文件中定义的全局变量被多个源文件包含 会出现多处定义。

/home/huqin/.espressif/tools/riscv32-esp-elf/esp-2022r1-11.2.0/riscv32-esp-elf/bin/../lib/gcc/riscv32-esp-elf/11.2.0/../../../../riscv32-esp-elf/bin/ld: esp-idf/main/libmain.a(sit_app_networkTask.c.obj):
/home/huqin/code/GS368/build/../components/sit_lib_network/include/sit_flash.h:21: multiple definition of `SerialNumber'; 
esp-idf/main/libmain.a(GS368_main.c.obj):/home/huqin/code/GS368/build/../components/sit_lib_network/include/sit_flash.h:21: first defined here
/home/huqin/.espressif/tools/riscv32-esp-elf/esp-2022r1-11.2.0/riscv32-esp-elf/bin/../lib/gcc/riscv32-esp-elf/11.2.0/../../../../riscv32-esp-elf/bin/ld: esp-idf/main/libmain.a(sit_aws_iot_main.c.obj):
/home/huqin/code/GS368/build/../components/sit_lib_network/include/sit_flash.h:21: multiple definition of `SerialNumber'; 
esp-idf/main/libmain.a(GS368_main.c.obj):/home/huqin/code/GS368/build/../components/sit_lib_network/include/sit_flash.h:21: first defined here

11.mbedTLS未找到加密函数

解决:使能DMH的配置文件

12、连接服务器一直会在ssl创建会话验证证书时失败 内存申请失败

更改动态申请后有时也会出现 Dynamic Impl: alloc(zu bytes) failed

I (11916) coreMQTT: Establishing a TLS session to a22kpq659tmps7-ats.iot.us-west-2.amazonaws.com:8883.
E (14496) Dynamic Impl: alloc(zu bytes) failed
E (14496) esp-tls-mbedtls: mbedtls_ssl_handshake returned -0x7F00
I (14496) esp-tls-mbedtls: Certificate verified.
E (14506) esp-tls: Failed to open new connection

最后是因为蓝牙协议栈开启导致占用内存太多,配网后重启不初始化并开启蓝牙解决问题。(以上配置未使用)

13、内存使用检测方法

图形化检测内存使用情况

需要依靠 vscode 或者 eclipse 来实现。

vTaskList() 可以用来分析操作系统当前 task 状态:

FreeRTOS 接口: vTaskList() - 可优化内存和 task 栈溢出定位_乐鑫科技 Espressif的博客-CSDN博客

vTaskGetRunTimeStats() 可以用来分析操作系统当前 task CPU 占用状态:

FreeRTOS 接口: vTaskGetRunTimeStats() - 可解决 task watchdog 和调优 task 优先级_乐鑫科技 Espressif的博客-CSDN博客

14、使用memcpy给结构体赋值时C语言,结构体,打印某个结构体成员值会带有其它结构体成员的值!

结构体成员不是一个以\0结尾的字符串,而%s只能用来输出以\0结尾的字符串,因为它只有遇到\0才会停下来。

解决方法:将结构图成员大小进行增大,初始化为0时会默认赋值\0.

15、获取ESP设备信息方式

espefuse.py -p /dev/ttyUSB0 summary //efuse设备信息
使用esptool.py --no-stub get_security_info读取的信息

 16、固件太大使用内存变多

参考这个链接减少 heap 使用:Minimizing RAM Usage - ESP32-C3 - — ESP-IDF Programming Guide latest documentation"

相关文章:

ESP32编译及运行错误记录

1、打印格式不对 一般都是因为日志中某个参数打印格式不匹配造成。 ESP_LOGI(TAG, "[APP] Free memory: %lu bytes", esp_get_free_heap_size());//将之前的%d 改为%lu 2、配置载不对 这里选择了蓝牙模块需要引入蓝牙组件才能编译通过 idf.py menuconfig Component…...

GEE开发之降雨(CHIRPS)数据获取和分析

GEE开发之降雨CHIRPS数据获取和分析1.数据介绍2.初识CHIRPS2.1 代码一2.2 代码二3.逐日数据分析和获取4.逐月数据分析和获取4.1 代码一4.2 代码二(简洁)5.逐年数据分析和获取5.1 代码一5.2 代码二(简洁)前言:主要获取和分析UCSB-CHG/CHIRPS/DAILY的日数据、月数据和…...

TypeScript中面向对象

面向对象 要想面向对象,操作对象,首先便要拥有对象; 要创建对象,必须要先定义类,所谓的类可以理解为对象的模型; 程序中可以根据类创建指定类型的对象; 举例来说: 可以通过Perso…...

Transformer 模型:入门详解(1)

动动发财的小手,点个赞吧! 简介 众所周知,transformer 架构是自然语言处理 (NLP) 领域的一项突破。它克服了 seq-to-seq 模型(如 RNN 等)无法捕获文本中的长期依赖性的局限性。事实证明,transformer 架构是…...

深入理解js中的new关键字

在js中我们经常会使用到new关键字,那我们在使用new关键字的时候,new到底做了什么呢?今天我们就来深入探究一下 1.初步使用 我们先来使用一下,这是一个正常操作 function Person() {this.name "John";}let person new…...

RT-Thread Nano(2) - 线程

参考:RT-Thread API参考手册: 线程管理 线程的分类:动态线程,静态线程 动态线程是系统自动从动态内存堆上分配栈空间的线程句柄(程序运行时再分配空间),静态线程是由用户分配栈空间与线程句柄(可以说是程序编译时已经分配好空间) 1.创建线程 创建一个动态线程 rt_thread_t …...

真香,Grafana开源Loki日志系统取代ELK?

一、Loki是什么? Loki是由Grafana Labs开源的一个水平可扩展、高可用性,多租户的日志聚合系统的日志聚合系统。它的设计初衷是为了解决在大规模分布式系统中,处理海量日志的问题。Loki采用了分布式的架构,并且与Prometheus、Graf…...

机器学习|多变量线性回归 | 吴恩达学习笔记

前文回顾:机器学习 | 线性回归(单变量) 目录 📚多维特征 📚多变量梯度下降 📚梯度下降法实践 🐇特征缩放 🐇学习率 📚特征和多项式回归 📚正规方程 &…...

高并发内存池

按照threadcache&#xff0c;centralcache&#xff0c;pagecache顺序所列 这里还需要一定的前期准备工作 首先是可以设计一个定长内存池 ObjectPool.h #pragma once #include<iostream> #include"Common.h" using std::cout; using std::endl; using std::…...

springboot mybatis-plus 对接 sqlserver 数据库 批处理的问题

问题&#xff1a; 在对接 sqlserver数据库的时候 主子表 保存的时候 子表批量保存 使用的 mybatis-plus提供的saveOrUpdateBatch 这个方法 但是 报错 报错内容为 &#xff1a; com.microsoft.sqlserver.jdbc.SQLServerException: 必须执行该语句才能获得结果。 框架版本 sprin…...

Acwing---843. n-皇后问题——DFS

n-皇后问题1.题目2.基本思想3.代码实现1.题目 n−皇后问题是指将 n 个皇后放在 nn 的国际象棋棋盘上&#xff0c;使得皇后不能相互攻击到&#xff0c;即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 n&#xff0c;请你输出所有的满足条件的棋子摆法。 …...

Android事件分发机制

文章目录Android View事件分发机制&#xff1a;事件分发中的核心方法onTouchListener和onClickListener的优先级事件分发DOWN,MOVE,UP 事件分发CANCEL代码实践requestdisallowIntereptTouchEvent作用Android View事件分发机制&#xff1a; 事件分发中的核心方法 Android中事件…...

python版协同过滤算法图书管理系统

基于协同过滤算法的图书管理系统 一、简介&#xff08;v信&#xff1a;1257309054&#xff09; ​ 本系统基于推荐算法给用户实现精准推荐图书。 ​ 根据用户对物品或者信息的偏好&#xff0c;发现物品或者内容本身的相关性&#xff0c;或者是发现用户的相关性&#xff0c;然…...

Redis基础入门

文章目录前言一、redis是什么&#xff1f;二、安装步骤1.下载安装包2.安装三、Redis的数据类型redis是一种高级的key-value的存储系统&#xff0c;其中的key是字符串类型&#xff0c;尽可能满足如下几点&#xff1a;字符串(String)列表(List)集合(Set&#xff0c;不允许出现重复…...

【微服务】Feign实现远程调用和负载均衡

目录 1.什么是Feign 2 订单微服务集成Feign 2.1.引入依赖 2.2添加注解 2.3编写Feign的客户端 2.4修改OrderServiceImpl.java的远程调用方法 2.5重启订单服务&#xff0c;并验证 总结 1.什么是Feign Feign是Spring Cloud提供的⼀个声明式的伪Http客户端&#xff0c; 它…...

Windows使用QEMU搭建arm64 ubuntu 环境

1. 下载 QEMU&#xff1a; https://qemu.weilnetz.de/w64/ QEMU UEFI固件文件&#xff1a; https://releases.linaro.org/components/kernel/uefi-linaro/latest/release/qemu64/QEMU_EFI.fd arm64 Ubuntu镜像&#xff1a; http://cdimage.ubuntu.com/releases/20.04.3/rel…...

NodeJS安装

一、简介Node.js是一个让JavaScript运行在服务端的开发平台&#xff0c;Node.js不是一种独立的语言&#xff0c;简单的说 Node.js 就是运行在服务端的 JavaScript。npm其实是Node.js的包管理工具&#xff08;package manager&#xff09;&#xff0c;类似与 maven。二、安装步骤…...

Gin 优雅打印请求与回包内容

文章目录1.Gin 的 Middleware2.使用 Middleware 打印请求与回包内容3.多次读取请求 Body 的问题4.多次读取响应 Body 的问题5.小结参考文献在开发 Web 应用程序时&#xff0c;难免不会遇到功能或性能等问题。为了快速定位问题&#xff0c;需要打印请求和响应的内容。本文将介绍…...

关于k8s中ETCD集群备份灾难恢复的一些笔记

写在前面 集群电源不稳定&#xff0c;或者节点动不动就 宕机,一定要做好备份&#xff0c;ETCD 的快照文件很容易受影响损坏。重置了很多次集群&#xff0c;才认识到备份的重要博文内容涉及 etcd 运维基础知识了解静态 Pod 方式 etcd 集群灾备与恢复 Demo定时备份的任务编写二进…...

【设计模式之美 设计原则与思想:设计原则】19 | 理论五:控制反转、依赖反转、依赖注入,这三者有何区别和联系?

关于 SOLID 原则&#xff0c;我们已经学过单一职责、开闭、里式替换、接口隔离这四个原则。今天&#xff0c;我们再来学习最后一个原则&#xff1a;依赖反转原则。在前面几节课中&#xff0c;我们讲到&#xff0c;单一职责原则和开闭原则的原理比较简单&#xff0c;但是&#x…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程

鸿蒙电脑版操作系统来了&#xff0c;很多小伙伴想体验鸿蒙电脑版操作系统&#xff0c;可惜&#xff0c;鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机&#xff0c;来体验大家心心念念的鸿蒙系统啦&#xff01;注意&#xff1a;虚拟…...

Python常用模块:time、os、shutil与flask初探

一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...