You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32-S2执行esp_event_loop_delete_default()函数卡住问题咨询

故障原因及解决方案

核心死锁原因

你大概率是在WiFi事件回调函数(也就是你注册的disconnect_handler)中直接调用的deinit_wifi函数:

  • 所有注册到默认事件循环的回调函数,都是运行在事件循环自身的任务上下文里的
  • esp_event_loop_delete 执行时会等待所有正在运行的事件回调执行完成,同时阻塞新的事件调度
  • 你在回调里直接调用删除事件循环的逻辑,就会形成「回调等删除函数执行完返回、删除函数等回调执行完再继续」的死锁,所以程序会卡在esp_event_loop_delete调用处

最优修复方案

你完全不需要删除默认事件循环,后续开启AP模式时依然需要用事件循环处理AP相关的连接、断开事件,删除重建属于多余操作,直接修改deinit_wifi逻辑即可:

  1. 保留原有卸载STA/以太网相关事件handler的逻辑
  2. 保留stop_webserver、example_disconnect调用
  3. 删除ESP_ERROR_CHECK(esp_event_loop_delete_default());这一行
  4. 直接调用init_access_point(),在AP初始化逻辑里注册AP需要的事件handler即可,复用原有默认事件循环

如果你确实需要删除事件循环的特殊场景

如果业务逻辑必须删除原有事件循环,不要在事件回调中直接执行删除操作:

  • 单独创建一个独立的业务任务
  • 连接失败达到次数阈值时,在disconnect_handler中只给业务任务发信号/队列消息
  • 由业务任务来执行完整的deinit_wifi逻辑,保证事件回调可以正常返回,不会出现死锁

内容的提问来源于stack exchange,提问作者Dansen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:36:04