完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
模块:ESP32-S3 N8R2
环境:ESP-IDF4.4.2 我通过spi外接WK2124 SPI转串口芯片(SPI总线上只皆有此一个芯片),在内置串口与SPI外扩串口通讯时,每个串口分别在一个独立的任务中进行收发数据,每个串口也都启动了一个中断任务,程序启动第一次收发都正常运行,在第二轮收发时报错,错误信息如下: assert failed: tlsf_free heap_tlsf.c:872 (!block_is_free(block) && "block already marked as free")Backtrace:0x40375d6a:0x3fc9d6500x4037c139:0x3fc9d670 0x40383155:0x3fc9d690 0x4038246f:0x3fc9d7b0 0x40382d86:0x3fc9d7d0 0x40375fca:0x3fc9d7f0 0x40383185:0x3fc9d810 0x40377882:0x3fc9d830 0x40377d08:0x3fc9d850 0x40377d55:0x3fc9d880 0x420095cf:0x3fc9d8a0 0x4200977e:0x3fc9d8d0 0x42009ccf:0x3fc9d920 0x42009588:0x3fc9d950 0x42007d8e:0x3fc9d970 0x42008db4:0x3fc9d990 0x42007dc8:0x3fc9d9d0 0x420083cd:0x3fc9d9f0 0x420078c8:0x3fc9da10 0x4037f265:0x3fc9db40 0x40375d6a: panic_abort at /home/zhuxy/esp/esp-idf/components/esp_system/panic.c:4020x4037c139: esp_system_abort at /home/zhuxy/esp/esp-idf/components/esp_system/esp_system.c:1280x40383155: __assert_func at /home/zhuxy/esp/esp-idf/components/newlib/assert.c:850x4038246f: tlsf_free at /home/zhuxy/esp/esp-idf/components/heap/heap_tlsf.c:872 (discriminator 1)0x40382d86: multi_heap_free_impl at /home/zhuxy/esp/esp-idf/components/heap/multi_heap.c:2220x40375fca: heap_caps_free at /home/zhuxy/esp/esp-idf/components/heap/heap_caps.c:3400x40383185: free at /home/zhuxy/esp/esp-idf/components/newlib/heap.c:390x40377882: uninstall_priv_desc at /home/zhuxy/esp/esp-idf/components/driver/spi_master.c:7360x40377d08: spi_device_polling_end at /home/zhuxy/esp/esp-idf/components/driver/spi_master.c:983 (discriminator 15)0x40377d55: spi_device_polling_transmit at /home/zhuxy/esp/esp-idf/components/driver/spi_master.c:10030x420095cf: wk_device_transmit at /home/zhuxy/esp-projects/IoT-Station/components/drivers/src/spi_wk2xxx.c:620x4200977e: wk_read_SFifo at /home/zhuxy/esp-projects/IoT-Station/components/drivers/src/spi_wk2xxx.c:1950x42009ccf: wk_read_bytes at /home/zhuxy/esp-projects/IoT-Station/components/drivers/src/spi_wk2xxx.c:5930x42009588: uart_port_read_bytes at /home/zhuxy/esp-projects/IoT-Station/components/drivers/src/uart_port.c:2960x42007d8e: _modbus_rtu_recv at /home/zhuxy/esp-projects/IoT-Station/components/libmodbus/src/modbus-rtu.c:2040x42008db4: _modbus_receive_msg at /home/zhuxy/esp-projects/IoT-Station/components/libmodbus/src/modbus.c:4120x42007dc8: _modbus_rtu_receive at /home/zhuxy/esp-projects/IoT-Station/components/libmodbus/src/modbus-rtu.c:1910x420083cd: modbus_receive at /home/zhuxy/esp-projects/IoT-Station/components/libmodbus/src/modbus.c:5040x420078c8: modbus_rtu_task at /home/zhuxy/esp-projects/IoT-Station/main/src/modbus_slave.c:1220x4037f265: vPortTaskWrapper at /home/zhuxy/esp/esp-idf/components/freertos/port/xtensa/port.c:131ELF file SHA256: 4be6f973b94b35ceCPU halted. 如果把两个任务的串口对调,错误又稍有不同,错误信息如下:Code: Select all Guru Meditation Error: Core 0 panic'ed (StoreProhibited). Exception was unhandled.Core 0 register dump:PC : 0x40382734 PS : 0x00060833 A0 : 0x80382d89 A1 : 0x3fc9f8a0 0x40382734: insert_free_block at /home/zhuxy/esp/esp-idf/components/heap/heap_tlsf.c:243 (inlined by) block_insert at /home/zhuxy/esp/esp-idf/components/heap/heap_tlsf.c:269 (inlined by) tlsf_free at /home/zhuxy/esp/esp-idf/components/heap/heap_tlsf.c:876A2 : 0x3fc9974c A3 : 0xa5a5a5a5 A4 : 0x3fc97a94 A5 : 0x00060823 A6 : 0x00060820 A7 : 0x00000001 A8 : 0x3fc9fad4 A9 : 0x00000017 A10 : 0x0000001f A11 : 0x3fc9fadc A12 : 0x3fc9fad4 A13 : 0x3fc9f9e8 A14 : 0x02ce0988 A15 : 0x00ffffff SAR : 0x00000018 EXCCAUSE: 0x0000001d EXCVADDR: 0xa5a5a5b1 LBEG : 0x40056f5c LEND : 0x40056f72 LCOUNT : 0xffffffff Backtrace:0x40382731:0x3fc9f8a00x40382d86:0x3fc9f8c0 0x40375fca:0x3fc9f8e0 0x40383185:0x3fc9f900 0x40377882:0x3fc9f920 0x40377d08:0x3fc9f940 0x40377d55:0x3fc9f970 0x420095cf:0x3fc9f990 0x4200977e:0x3fc9f9c0 0x42009ccf:0x3fc9fa10 0x42009588:0x3fc9fa40 0x42007d8e:0x3fc9fa60 0x42008db4:0x3fc9fa80 0x42008f49:0x3fc9fac0 0x42008ff1:0x3fc9fc00 0x420071f5:0x3fc9fc30 0x4037f265:0x3fc9fca0 0x40382731: insert_free_block at /home/zhuxy/esp/esp-idf/components/heap/heap_tlsf.c:242 (inlined by) block_insert at /home/zhuxy/esp/esp-idf/components/heap/heap_tlsf.c:269 (inlined by) tlsf_free at /home/zhuxy/esp/esp-idf/components/heap/heap_tlsf.c:8760x40382d86: multi_heap_free_impl at /home/zhuxy/esp/esp-idf/components/heap/multi_heap.c:2220x40375fca: heap_caps_free at /home/zhuxy/esp/esp-idf/components/heap/heap_caps.c:3400x40383185: free at /home/zhuxy/esp/esp-idf/components/newlib/heap.c:390x40377882: uninstall_priv_desc at /home/zhuxy/esp/esp-idf/components/driver/spi_master.c:7360x40377d08: spi_device_polling_end at /home/zhuxy/esp/esp-idf/components/driver/spi_master.c:983 (discriminator 15)0x40377d55: spi_device_polling_transmit at /home/zhuxy/esp/esp-idf/components/driver/spi_master.c:10030x420095cf: wk_device_transmit at /home/zhuxy/esp-projects/IoT-Station/components/drivers/src/spi_wk2xxx.c:620x4200977e: wk_read_SFifo at /home/zhuxy/esp-projects/IoT-Station/components/drivers/src/spi_wk2xxx.c:1950x42009ccf: wk_read_bytes at /home/zhuxy/esp-projects/IoT-Station/components/drivers/src/spi_wk2xxx.c:5930x42009588: uart_port_read_bytes at /home/zhuxy/esp-projects/IoT-Station/components/drivers/src/uart_port.c:2960x42007d8e: _modbus_rtu_recv at /home/zhuxy/esp-projects/IoT-Station/components/libmodbus/src/modbus-rtu.c:2040x42008db4: _modbus_receive_msg at /home/zhuxy/esp-projects/IoT-Station/components/libmodbus/src/modbus.c:4120x42008f49: read_registers at /home/zhuxy/esp-projects/IoT-Station/components/libmodbus/src/modbus.c:12020x42008ff1: modbus_read_registers at /home/zhuxy/esp-projects/IoT-Station/components/libmodbus/src/modbus.c:12430x420071f5: modbusTask at /home/zhuxy/esp-projects/IoT-Station/main/main.c:840x4037f265: vPortTaskWrapper at /home/zhuxy/esp/esp-idf/components/freertos/port/xtensa/port.c:131 我还发现一个奇怪现象,在调用SPI驱动接口前如加有printf或ESP_LOG来输出日志,则有可能正常运行(未长时间测试,未加日志输出则在第二次串口通讯时报错),这是什么原因呢? |
|
相关推荐
1个回答
|
|
根据您提供的错误信息,这个问题可能是由于内存管理问题导致的。错误信息 "assert failed: tlsf_free heap_tlsf.c:872 (!block_is_free(block) && "block already marked as free")" 表示在尝试释放一个已经被标记为已释放的内存块。
以下是一些建议来解决这个问题: 1. **检查内存分配和释放**:确保您在程序中正确地分配和释放内存。避免重复释放同一块内存,这可能导致这个错误。 2. **使用 ESP-IDF 的内存调试工具**:ESP-IDF 提供了一些内存调试工具,例如 `esp_heap_caps_dump()` 和 `esp_heap_task_info()`,这些工具可以帮助您检查内存使用情况和潜在的内存泄漏问题。 3. **检查 SPI 驱动程序**:确保 SPI 驱动程序正确地处理内存分配和释放。如果驱动程序在处理 SPI 数据传输时出现问题,可能会导致内存管理错误。 4. **优化任务调度**:由于您提到每个串口分别在一个独立的任务中进行收发数据,并且每个串口都启动了一个中断任务,可能存在任务调度问题。确保任务之间的同步和互斥机制正确实现,以避免潜在的竞态条件。 5. **更新 ESP-IDF 版本**:虽然您使用的是 ESP-IDF 4.4.2 版本,但可能存在一些已知的内存管理问题。尝试升级到最新的稳定版本,看看问题是否得到解决。 6. **查看错误回溯信息**:错误回溯信息可以帮助您确定问题发生的具体位置。根据您提供的错误回溯,您可以检查 `heap_tlsf.c` 文件的第 872 行,看看问题是如何发生的。 |
|
|
|
只有小组成员才能发言,加入小组>>
968 浏览 1 评论
552浏览 6评论
461浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
446浏览 5评论
447浏览 4评论
417浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 19:27 , Processed in 0.711923 second(s), Total 46, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号