【ESP32】反复重启

本文讲述了开发者在ESP32项目中遇到的开发问题,主要原因是未正确分配结构体内存,导致StoreProhibited错误。作者通过调试找出问题并分享了解决方法,提醒读者在使用结构体时务必确保其正确初始化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ESP32开发 反复重启

串口输出如下所示:

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 188777542, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:1044
load:0x40078000,len:10124
load:0x40080400,len:5828
entry 0x400806a8
Power: Waiting...
Power: ON
Encoder init start...
Guru Meditation Error: Core  1 panic'ed (StoreProhibited). Exception was unhandled.
Core 1 register dump:
PC      : 0x400d12d1  PS      : 0x00060530  A0      : 0x800d15f4  A1      : 0x3ffb1f60
A2      : 0x3ffca144  A3      : 0x40086a94  A4      : 0x0800001c  A5      : 0x00000003
A6      : 0x00000003  A7      : 0x00000000  A8      : 0x00000000  A9      : 0x00000007
A10     : 0x3ff440ec  A11     : 0x400d11a4  A12     : 0x3ffc1a10  A13     : 0x00000000
A14     : 0x3ff59000  A15     : 0x00000000  SAR     : 0x00000005  EXCCAUSE: 0x0000001d  
EXCVADDR: 0x00000000  LBEG    : 0x400014fd  LEND    : 0x4000150d  LCOUNT  : 0xffffffff

ELF file SHA256: 0000000000000000

Backtrace: 0x400d12d1:0x3ffb1f60 0x400d15f1:0x3ffb1f80 0x400ec1ee:0x3ffb1fb0 0x40089a32:0x3ffb1fd0

Rebooting...
ets Jun  8 2016 00:22:57

经过调试,发现是结构体的使用出现了问题。
使用结构体的时候只定义了一个结构体指针,这样并没有给结构体分配空间,所以在给结构体赋值的时候,程序找不到地址空间进行操作,所以出现了CPU异常。
报错信息中,StoreProhibited应该就是指这个原因。

下次得注意结构体的使用,应该是学C过了很久了,期间很少使用结构体,导致不熟练。不过好在,现在排查出来了,但花费的时间过长,之后应该注意调试流程。

Controller_Action * encoder_act_info;
void func(void)
{
	encoder_act_info->xxx = 1; // WRONG!!!!!
}
<think>嗯,用户这次想了解ESP32-C3的无线烧录功能,这是个很实用的需求。之前用户已经查阅了ESP32-C3的基本特性,现在聚焦到具体应用场景了。从专业角度看,无线烧录(OTA)确实是ESP32系列的核心优势之一,能大幅降低现场维护成本。用户提到"教程/配置/方法",说明需要实操指导而非理论。考虑到ESP32-C3的RISC-V架构和常规ESP32略有差异,必须特别注意开发环境配置的兼容性。OTA功能依赖分区表配置和bootloader支持,这是关键点。安全方面需要重点提示,用户可能忽略OTA带来的安全风险。引用[1]提到ESP32-C3有安全启动和flash加密功能,这些必须整合到OTA方案里。实际项目中经常遇到开发者忘记签名验证导致固件被篡改的案例。准备分四个层级回复:首先解释OTA的基本原理,因为基础概念没理清会导致后续配置混乱;然后详述开发环境配置,包括PlatformIO和IDF的选择建议;接着是具体的代码修改要点,要强调app_main里开启OTA服务的步骤;最后补充安全建议和常见问题。这样用户能阶梯式理解。特别注意要区分出厂烧录和后续更新的不同流程。很多教程只讲二次更新,却忽略首次有线烧录bootloader的步骤,这会导致用户卡在初始阶段。电路图部分引用[1]的天线设计也很重要,WiFi信号差是OTA失败的常见原因。</think> 以下是ESP32-C3无线烧录(OTA)的详细配置教程,结合硬件特性和安全机制设计: ### 一、核心前提条件 1. **基础固件有线烧录** ⚠️ 首次OTA前需通过USB-TTL **有线烧录基础固件**(含OTA功能的bootloader和分区表) 2. **Wi-Fi网络配置** 确保ESP32-C3可连接至AP(需提前在代码中配置SSID和密码) 3. **分区表配置** 必需包含 `ota_0` 和 `ota_1` 分区(默认分区表已包含) --- ### 二、开发环境配置(以ESP-IDF v5.1为例) ```bash # 设置目标芯片 idf.py set-target esp32c3 # 启用OTA功能 idf.py menuconfig ``` **关键配置路径**: `Component config → ESP HTTPS OTA` `Bootloader config → Enable OTA rollback` `Partition Table → Factory app and two OTA definitions` --- ### 三、代码关键修改 ```c // 在app_main中启动OTA服务 void app_main() { wifi_init_sta(); // 连接Wi-Fi esp_https_ota_config_t ota_config = { .https_cert_bundle = NULL, // 使用IDF默认证书 .keep_alive_enable = true }; esp_https_ota(&ota_config); // 启动OTA服务 } ``` --- ### 四、无线烧录操作流程 1. **生成新版固件** ```bash idf.py build ``` 2. **启动本地服务器** ```bash cd build python -m http.server 8070 ``` 3. **触发OTA更新** ```python import requests ESP32_IP = "192.168.1.100" requests.post(f"http://{ESP32_IP}/update", files={'file': open('firmware.bin','rb')}) ``` --- ### 五、安全增强配置(引用[^1]特性) ```menuconfig # 启用安全OTA CONFIG_ESP_HTTPS_OTA_ALLOW_HTTP=false # 强制HTTPS CONFIG_APP_SECURE_SIGNED_ON_UPDATE=y # 固件签名验证 CONFIG_APP_COMPILE_TIME_VALIDATION=y # 编译时验证 ``` --- ### 六、OTA调试技巧 | 现象 | 排查方向 | |----------------------|----------------------------| | 无法连接服务器 | Wi-Fi RSSI检查(需>-75dBm)| | 更新后反复重启 | 分区表校验(需双OTA分区) | | 签名验证失败 | 检查密钥匹配性 | | Deep-sleep唤醒失败 | RTC内存保留配置 | > 📌 **电路设计提示**:确保天线阻抗匹配(参考数据手册RF章节[^1]),不匹配会导致OTA中断 --- ### 七、进阶优化方案 1. **断点续传** 在`esp_https_ota_config_t`中启用`.retry_timeout_ms=15000` 2. **压缩升级** 使用LZMA-H压缩算法减少40%传输量 3. **双备份回滚** 通过`esp_ota_mark_app_valid_cancel_rollback()`防变砖 [^1]: ESP32-C3 系列芯片技术规格书 Chapter 7.6 OTA 与 RF 设计规范
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值