乐鑫技术交流
直播中

王超

7年用户 1304经验值
私信 关注
[问答]

使用http client时出现了assert failed: spinlock_release spinlock.h:140 (core_id == lock->owner)怎么解决?

I (04:07:27.062) HTTP_CLIENT heartbeat: 开始计时 http_Post_heartbeat
HTTP_EVENT_DISCONNECTED 0
I (04:07:27.573) HTTP_CLIENT heartbeat: HTTP_EVENT_DISCONNECTED

assert failed: spinlock_release spinlock.h:140 (core_id == lock->owner)


Backtrace:0x40379ef6:0x3fceaa200x4038771d:0x3fceaa40 0x4038e375:0x3fceaa60 0x403                                                                                                                               8ac13:0x3fceab80 0x4038814b:0x3fceaba0 0x42050322:0x3fceabe0 0x4203d21d:0x3fceac                                                                                                                               10 0x4203d251:0x3fceac30 0x42050661:0x3fceac50 0x420e1ef5:0x3fceac70 0x4203a105:                                                                                                                               0x3fceac90 0x4003a731:0x3fceacb0  |<-CORRUPTED
0x40379ef6: panic_abort at /home/liyadong/esp32/esp-skainet-master/esp-skainet/e                                                                                                                               sp-idf/components/esp_system/panic.c:402

0x4038771d: esp_system_abort at /home/liyadong/esp32/esp-skainet-master/esp-skai                                                                                                                               net/esp-idf/components/esp_system/esp_system.c:121

0x4038e375: __assert_func at /home/liyadong/esp32/esp-skainet-master/esp-skainet                                                                                                                               /esp-idf/components/newlib/assert.c:85

0x4038ac13: spinlock_release at /home/liyadong/esp32/esp-skainet-master/esp-skai                                                                                                                               net/esp-idf/components/esp_hw_support/include/soc/spinlock.h:140
(inlined by) vPortCPUReleaseMutex at /home/liyadong/esp32/esp-skainet-master/es                                                                                                                               p-skainet/esp-idf/components/freertos/port/xtensa/include/freertos/portmacro.h:5                                                                                                                               68
(inlined by) vPortExitCritical at /home/liyadong/esp32/esp-skainet-master/esp-s                                                                                                                               kainet/esp-idf/components/freertos/port/xtensa/port.c:298

0x4038814b: xQueueGenericSend at /home/liyadong/esp32/esp-skainet-master/esp-ska                                                                                                                               inet/esp-idf/components/freertos/queue.c:946

0x42050322: sys_mbox_trypost at /home/liyadong/esp32/esp-skainet-master/esp-skai                                                                                                                               net/esp-idf/components/lwip/port/esp32/freertos/sys_arch.c:269

0x4203d21d: tcpip_inpkt at /home/liyadong/esp32/esp-skainet-master/esp-skainet/e                                                                                                                               sp-idf/components/lwip/lwip/src/api/tcpip.c:269

0x4203d251: tcpip_input at /home/liyadong/esp32/esp-skainet-master/esp-skainet/e                                                                                                                               sp-idf/components/lwip/lwip/src/api/tcpip.c:293

0x42050661: wlanif_input at /home/liyadong/esp32/esp-skainet-master/esp-skainet/                                                                                                                               esp-idf/components/lwip/port/esp32/netif/wlanif.c:208

0x420e1ef5: esp_netif_receive at /home/liyadong/esp32/esp-skainet-master/esp-ska                                                                                                                               inet/esp-idf/components/esp_netif/lwip/esp_netif_lwip.c:886

0x4203a105: wifi_sta_receive at /home/liyadong/esp32/esp-skainet-master/esp-skai                                                                                                                               net/esp-idf/components/esp_wifi/src/wifi_netif.c:47





ELF file SHA256: e6b9f870c66cba9e

Rebooting...
ESP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0xc (RTC_SW_CPU_RST),boot:0x2b (SPI_FAST_FLASH_BOOT)
Saved PC:0x4038ab63
0x4038ab63: spinlock_acquire at /home/liyadong/esp32/esp-skainet-master/esp-skai                                                                                                                               net/esp-idf/components/esp_hw_support/include/soc/spinlock.h:113
(inlined by) vPortCPUAcquireMutex at /home/liyadong/esp32/esp-skainet-master/es                                                                                                                               p-skainet/esp-idf/components/freertos/port/xtensa/include/freertos/portmacro.h:5                                                                                                                               58
(inlined by) vPortEnterCritical at /home/liyadong/esp32/esp-skainet-master/esp-                                                                                                                               skainet/esp-idf/components/freertos/port/xtensa/port.c:285

SPIWP:0xee
mode:DIO, clock d
                  

回帖(1)

杨秀英

2024-6-18 16:22:25
要解决这个问题,我们可以按照以下步骤进行:

1. **查找问题原因**:首先,我们需要了解为什么断言失败。在这里,断言检查的是`core_id == lock->owner`。这意味着当前核心ID(core_id)应该与锁的拥有者(lock->owner)相同。如果这个条件不满足,就会出现断言失败。

2. **检查代码**:查看你的代码,特别是与HTTP客户端和锁相关的部分。确保在使用锁时,你正确地获取和释放了锁。这可能涉及到检查是否有多线程访问共享资源,以及是否在正确的核心上执行了锁操作。

3. **分析日志**:从你提供的日志信息来看,有一个HTTP_EVENT_DISCONNECTED事件。这可能与问题有关。检查你的代码,看看在处理这个事件时是否有不当的操作,例如在错误的核心上释放锁。

4. **使用调试工具**:如果可能的话,使用调试工具(如gdb)来运行你的程序,并在断言失败的地方设置一个断点。这将帮助你更详细地了解问题发生时的程序状态。

5. **修复问题**:根据你的分析,找到问题的根本原因,并进行修复。这可能涉及到修改代码,以确保锁的正确使用,或者修复与多线程相关的逻辑错误。

6. **测试**:在修复问题后,重新运行你的程序,并确保问题不再出现。如果问题仍然存在,你可能需要进一步调试和分析。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分