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

ESP32Cam调用BLEDevice::Init触发Guru Meditation Error求助

ESP32 调用BLEDevice::Init获取手机凭证时触发Guru Meditation Error

Guru Meditation Error: Core 0 panic'ed (LoadProhibited). Exception was unhandled.

Core 0 register dump:
PC : 0x40099c19 PS : 0x00060330 A0 : 0x8009a8d2 A1 : 0x3ffdbf00
A2 : 0xffffffff A3 : 0xffffffff A4 : 0x20000000 A5 : 0x00060f23
A6 : 0x00060f20 A7 : 0x00000001 A8 : 0x00000003 A9 : 0x00000006
A10 : 0x00000027 A11 : 0x0000111c A12 : 0x00000013 A13 : 0x00000040
A14 : 0xfffffffc A15 : 0x00001ebc SAR : 0x00000007 EXCCAUSE: 0x0000001c
EXCVADDR: 0x0000002b LBEG : 0x40092a70 LEND : 0x40092a7b LCOUNT : 0x00000000

特征及全局定义

BLEServer *pServer = NULL;
BLECharacteristic *pCharCredential = NULL;
BLECharacteristic *pCharMacAddr = NULL;
BLECharacteristic *pCharMacExtAddr = NULL;
BLECharacteristic *pCharBatLvl = NULL;

BLEService *pService = NULL;
BLEAdvertising *pAdvertising = NULL;

BLE回调函数

class MyServerCallbacks : public BLEServerCallbacks
{
  void onConnect(BLEServer *pServer)
  {
    BLEDevice::startAdvertising();
  };
};

class credentialCallback : public BLECharacteristicCallbacks
{
  void onWrite(BLECharacteristic *pCharacteristic)
  {
    std::string value = pCharacteristic->getValue();
    // 在此存储SSID和密码
    SSID = value.substr(0, value.find('|'));
    PWD = value.substr(value.find('|') + 1, value.size());
    state = STATE_SWITCH_MODE;
  }
};

触发异常的代码段

case STATE_BLE:
    BLEDevice::init(DEVICE_NAME); // <----- 问题出在此处
  

    pServer = BLEDevice::createServer();
    pServer->setCallbacks(new MyServerCallbacks());

    pService = pServer->createService(SERVICE_UUID);

    // 凭证特征
    pCharCredential = pService->createCharacteristic(
        CREDENTIAL_UUID,
        BLECharacteristic::PROPERTY_READ |
            BLECharacteristic::PROPERTY_WRITE |
            BLECharacteristic::PROPERTY_NOTIFY |
            BLECharacteristic::PROPERTY_INDICATE);

    pCharCredential->setCallbacks(new credentialCallback());
    pCharCredential->addDescriptor(new BLE2902());

    // 主摄像头MAC地址
    pCharMacAddr = pService->createCharacteristic(
        MAC_UUID,
        BLECharacteristic::PROPERTY_READ |
            BLECharacteristic::PROPERTY_WRITE |
            BLECharacteristic::PROPERTY_NOTIFY |
            BLECharacteristic::PROPERTY_INDICATE);

    pCharMacAddr->setValue(WiFi.macAddress().c_str());
    pCharMacAddr->addDescriptor(new BLE2902());

    // 副摄像头MAC地址
    pCharMacExtAddr = pService->createCharacteristic(
        MAC_EXT_UUID,
        BLECharacteristic::PROPERTY_READ |
            BLECharacteristic::PROPERTY_WRITE |
            BLECharacteristic::PROPERTY_NOTIFY |
            BLECharacteristic::PROPERTY_INDICATE);

    pCharMacExtAddr->setValue(macExtCam.c_str());
    pCharMacExtAddr->addDescriptor(new BLE2902());

    // 电池电量
    pCharBatLvl = pService->createCharacteristic(
        BAT_LVL_UUID,
        BLECharacteristic::PROPERTY_READ |
            BLECharacteristic::PROPERTY_WRITE |
            BLECharacteristic::PROPERTY_NOTIFY |
            BLECharacteristic::PROPERTY_INDICATE);

    char ctable[5];
    sprintf(ctable, "%d", batLvl);
    pCharBatLvl->setValue(ctable);
    pCharBatLvl->addDescriptor(new BLE2902());

    pService->start();

    pAdvertising = BLEDevice::getAdvertising();
    pAdvertising->addServiceUUID(SERVICE_UUID);
    pAdvertising->setScanResponse(false);
    pAdvertising->setMinPreferred(0x0); // 设置为0x00则不广播该参数
    BLEDevice::startAdvertising();

    delay(10);
    state = STATE_IDLE;
    break;

排查过程

该问题近期才出现,2022年10月至2023年3月9日期间代码运行完全正常,已做以下排查:

硬件排查

  • 更换3台不同的ESP32Cam测试,排除硬件故障
  • 使用2台不同编程器测试,排除编程器问题

软件排查

  • 更新所有库及开发板包,排除版本过时问题
  • 从PlatformIO切换到ArduinoIDE 2.0测试
  • 回退至旧版本库测试(PlatformIO和ArduinoIDE均尝试)
  • 使用之前正常的主分支代码,问题依旧存在
  • 注释BLEDevice::Init后设备不再崩溃,但BLE无法启动(符合预期)
  • 排查发现问题似乎源自esp32-hal-bt.h中的btStart()函数
  • 恢复CPU时钟频率为默认值

从错误信息判断,问题大概率是内存分配异常,但无法定位具体原因。

编辑补充

已添加对pServer、pService及所有特征的空指针检查,但问题未解决:

pServer = BLEDevice::createServer();
    if (pServer == NULL)
    {
      Serial.println("Can't create server");
      break;
    }

内容的提问来源于stack exchange,提问作者Mathias DA COSTA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:05:40