乐鑫技术交流
直播中

李麒铭

8年用户 1498经验值
私信 关注
[问答]

BLE连接成功并运行数小时后系统重启,为什么?

我的系统是基于micropython+espidf(V3.3)。当esp32作为从机被其他设备连接上之后, 一般运行几个小时我的系统就会出现重启或者其他不可能出现的问题。 比如micropython报这样的错误
File "neurons_protocol/neurons_engine.py", line 353, in neurons_request
File "neurons_protocol/neurons_engine.py", line 221, in common_neurons_command_request
AttributeError: 'bytearray' object has no attribute 'append'

重启时,backtrace也没有打印出有效信息, 类似这样
Guru Meditation Error: Core  0 panic'ed (LoadProhibited). Exception was unhandled.
Core 0 register dump:
PC      : 0x40269a07  PS      : 0x00060130  A0      : 0x800ea269  A1      : 0x3fafe720  
A2      : 0x3fafe740  A3      : 0x00000028  A4      : 0x00060520  A5      : 0x3ffc46a8  
A6      : 0x3ffc4aa8  A7      : 0x0000b2b5  A8      : 0x00000000  A9      : 0x800e00cc  
A10     : 0x800e00cb  A11     : 0x3ffcbf08  A12     : 0x8009b94b  A13     : 0x3fb0db70  
A14     : 0x00000003  A15     : 0x00060023  SAR     : 0x00000010  EXCCAUSE: 0x0000001c  
EXCVADDR: 0x800e00cb  LBEG    : 0x40094ee8  LEND    : 0x40094ef3  LCOUNT  : 0x00000000  

ELF file SHA256: 0000000000000000000000000000000000000000000000000000000000000000

Backtrace: 0x40269a07:0x3fafe720

系统描述:
1. micropython使用了spiram作为其heap使用。
2. micropython位于core1, 没有其他多余线程。


我的配置信息如下:
# MicroPython on ESP32, ESP IDF configuration with SPIRAM support
# The following options override the defaults

CONFIG_IDF_TARGET="esp32"

# Application manager
CONFIG_APP_EXCLUDE_PROJECT_VER_VAR=y
CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR=y

# Bootloader config
CONFIG_LOG_BOOTLOADER_LEVEL_NONE=y
CONFIG_LOG_BOOTLOADER_LEVEL=0

# log
CONFIG_LOG_DEFAULT_LEVEL_NONE=y
CONFIG_LOG_DEFAULT_LEVEL=0

# ESP32-specific
CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y
CONFIG_SPIRAM_SUPPORT=y
CONFIG_SPIRAM_IGNORE_NOTFOUND=y
CONFIG_SPIRAM_USE_MEMMAP=y
CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=n
CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=n
CONFIG_ESP32_XTAL_FREQ_AUTO=y

# Power Management
CONFIG_PM_ENABLE=y

# FreeRTOS
CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=2
CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK=y
CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y
# UDP
CONFIG_PPP_SUPPORT=y
CONFIG_PPP_PAP_SUPPORT=y
CONFIG_PPP_CHAP_SUPPORT=y

CONFIG_TCPIP_LWIP=y

CONFIG_BT_ENABLED=y
CONFIG_BTDM_CONTROLLER_MODE_BLE_ONLY=y
CONFIG_BTDM_CONTROLLER_MODE_BR_EDR_ONLY=
CONFIG_BTDM_CONTROLLER_MODE_BTDM=
CONFIG_BTDM_CTRL_PINNED_TO_CORE_0=y
CONFIG_BTDM_CTRL_PINNED_TO_CORE=0
CONFIG_BT_BLUEDROID_PINNED_TO_CORE_1=y
CONFIG_BT_BLUEDROID_PINNED_TO_CORE=1
CONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST=y
CONFIG_BT_STACK_NO_LOG=y
CONFIG_BT_BLE_DYNAMIC_ENV_MEMORY=y

CONFIG_FREERTOS_HZ=500
CONFIG_TIMER_TASK_PRIORITY=1

CONFIG_INT_WDT_CHECK_CPU0=n
CONFIG_INT_WDT_CHECK_CPU1=n
CONFIG_TASK_WDT_CHECK_IDLE_TASK=n

CONFIG_ESP32_SPIRAM_SUPPORT=y
CONFIG_SPIRAM_CACHE_WORKAROUND=y
CONFIG_SPIRAM_IGNORE_NOTFOUND=y
CONFIG_SPIRAM_USE_MALLOC=y
CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY=y
CONFIG_WIFI_LWIP_ALLOCATION_FROM_SPIRAM_FIRST=y

CONFIG_SPIRAM_SPEED_80M=y
CONFIG_ESPTOOLPY_FLASHFREQ_80M=y
CONFIG_ESPTOOLPY_FLASHFREQ="80m"
CONFIG_SPIRAM_OCCUPY_VSPI_HOST=y

# CONFIG_FREERTOS_UNICORE=y

# wifi
CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM=10


目前发现的具体情况是,当BLE开启但是不连接时, 一切正常。但是一旦连接之后就会出问题(即使没有数据传输也会出问题)。
有没有人知道,蓝牙连接后会对系统产生哪些影响。

顺带说一下, 我单独测试蓝牙功能(无micropython)或者单独测试micropython都没有问题。 蓝牙和micropython没有任何代码上的联系。
                                                                                    

回帖(1)

刘艳

2024-6-24 16:40:31
根据您提供的信息,您的ESP32系统在使用MicroPython和ESP-IDF(V3.3)时,在与其他设备建立BLE连接并运行数小时后出现重启或其他问题。这可能是由多种原因导致的,以下是一些建议和可能的原因:

1. **内存泄漏**:长时间运行的程序可能会遇到内存泄漏问题,导致可用内存逐渐减少,最终触发系统重启。检查您的代码,确保在不再需要时释放内存。

2. **堆栈溢出**:如果程序中的递归调用过深或局部变量过大,可能导致堆栈溢出。检查递归函数和局部变量的使用,确保它们在合理的范围内。

3. **死锁**:多线程或异步编程可能导致死锁,使系统无法正常运行。检查您的代码,确保没有死锁的情况。

4. **硬件问题**:ESP32硬件本身可能存在问题,如电源不稳定、温度过高等。检查硬件连接和环境,确保它们正常工作。

5. **软件问题**:ESP-IDF或MicroPython的版本可能存在已知的bug或兼容性问题。尝试升级到最新版本,或查看相关社区和论坛,看看是否有其他人遇到类似问题。

6. **BLE连接问题**:长时间保持BLE连接可能导致一些不稳定的行为。检查BLE连接的代码,确保正确处理连接、断开和重连。

7. **错误处理**:确保您的代码能够正确处理各种异常情况,避免因未处理的异常导致系统崩溃。

8. **日志记录**:增加日志记录功能,以便在出现问题时能够快速定位问题原因。

9. **调试和测试**:在开发过程中,使用调试工具和单元测试来检查代码的正确性和稳定性。

10. **查看错误信息**:您提到的错误信息和Guru Meditation Error可能提供了一些线索。尝试理解这些错误信息,并根据它们来定位问题。

综上所述,要解决这个问题,您需要从多个方面进行排查和优化。希望这些建议能帮助您找到问题的原因并解决它。
举报

更多回帖

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