-
Notifications
You must be signed in to change notification settings - Fork 7.7k
Description
Hardware:
Board: ESP32 Dev Module
Core Installation version: 1.0.4
IDE name: Arduino IDE
Flash Frequency: 80Mhz
PSRAM enabled: NO
Upload Speed: 921600
Computer OS: Windows 10
Description:
Hi
I'm working on a program that turns the wifi-bluetooth ble communication on and off with the esp32 module.
Then I checked a memory leak while iterating through BLEDevice :: init() deinit().
If you repeat the init()-deinit() operation about 45 times, you will reboot because of insufficient memory.
Below is the test arduino code, serial monitor window, and backtrace data when rebooted.
Please help me to solve this problem
Thank you.
Sketch: (leave the backquotes for code formatting)
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
BLEServer* pServer = NULL;
BLECharacteristic* pCharacteristic = NULL;
BLEService *pService = NULL;
bool deviceConnected = false;
bool oldDeviceConnected = false;
uint32_t value = 0;
#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"
class MyServerCallbacks: public BLEServerCallbacks {
void onConnect(BLEServer* pServer) {
deviceConnected = true;
};
void onDisconnect(BLEServer* pServer) {
deviceConnected = false;
}
};
void setup() {
Serial.begin(115200);
bleInit();
}
void bleInit() {
Serial.println("init start");
// Create the BLE Device
BLEDevice::init("ESP32");
// Create the BLE Server
pServer = BLEDevice::createServer();
pServer->setCallbacks(new MyServerCallbacks());
// Create the BLE Service
pService = pServer->createService(SERVICE_UUID);
Serial.println("create Service");
// Create a BLE Characteristic
pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_READ |
BLECharacteristic::PROPERTY_WRITE |
BLECharacteristic::PROPERTY_NOTIFY |
BLECharacteristic::PROPERTY_INDICATE
);
// Create a BLE Descriptor
Serial.println("create Characteristic");
pCharacteristic->addDescriptor(new BLE2902());
// Start the service
pService->start();
Serial.println("pService start");
// Start advertising
BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
pAdvertising->addServiceUUID(SERVICE_UUID);
pAdvertising->setScanResponse(false);
pAdvertising->setMinPreferred(0x0); // set value to 0x00 to not advertise this parameter
BLEDevice::startAdvertising();
//Serial.println("Waiting a client connection to notify...");
Serial.println("init complete");
}
void bleDeInit() {
Serial.println("deinit start");
//pServer->removeService(pService);
BLEDevice::deinit(false);
Serial.println("deinit complete");
}
void loop() {
delay(1000);
Serial.printf("ON Heap Size: %d ", ESP.getFreeHeap());
bleDeInit();
delay(1000);
Serial.printf("OFF Heap Size: %d ", ESP.getFreeHeap());
bleInit();
}
Debug Messages:
init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 184660 deinit start
deinit complete
OFF Heap Size: 275644 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 181792 deinit start
deinit complete
OFF Heap Size: 272768 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 178924 deinit start
deinit complete
OFF Heap Size: 269880 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 176068 deinit start
deinit complete
OFF Heap Size: 267032 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 173156 deinit start
deinit complete
OFF Heap Size: 264116 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 170328 deinit start
deinit complete
OFF Heap Size: 261284 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 167484 deinit start
deinit complete
OFF Heap Size: 258448 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 164664 deinit start
deinit complete
OFF Heap Size: 255608 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 161676 deinit start
deinit complete
OFF Heap Size: 252620 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 158824 deinit start
deinit complete
OFF Heap Size: 249780 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 156004 deinit start
deinit complete
OFF Heap Size: 246948 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 153184 deinit start
deinit complete
OFF Heap Size: 244112 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 150340 deinit start
deinit complete
OFF Heap Size: 241276 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 147508 deinit start
deinit complete
OFF Heap Size: 238432 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 144672 deinit start
deinit complete
OFF Heap Size: 235600 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 141844 deinit start
deinit complete
OFF Heap Size: 232760 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 138708 deinit start
deinit complete
OFF Heap Size: 229620 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 135876 deinit start
deinit complete
OFF Heap Size: 226780 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 133032 deinit start
deinit complete
OFF Heap Size: 223944 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 130188 deinit start
deinit complete
OFF Heap Size: 221108 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 127356 deinit start
deinit complete
OFF Heap Size: 218272 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 124508 deinit start
deinit complete
OFF Heap Size: 215448 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 121672 deinit start
deinit complete
OFF Heap Size: 212612 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 118848 deinit start
deinit complete
OFF Heap Size: 209780 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 116016 deinit start
deinit complete
OFF Heap Size: 206952 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 113192 deinit start
deinit complete
OFF Heap Size: 204104 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 110352 deinit start
deinit complete
OFF Heap Size: 201268 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 107504 deinit start
deinit complete
OFF Heap Size: 198432 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 104680 deinit start
deinit complete
OFF Heap Size: 195592 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 101848 deinit start
deinit complete
OFF Heap Size: 192752 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 99020 deinit start
deinit complete
OFF Heap Size: 189912 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 96212 deinit start
deinit complete
OFF Heap Size: 187080 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 92752 deinit start
deinit complete
OFF Heap Size: 183636 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 89916 deinit start
deinit complete
OFF Heap Size: 180800 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 87084 deinit start
deinit complete
OFF Heap Size: 177964 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 84256 deinit start
deinit complete
OFF Heap Size: 175132 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 81428 deinit start
deinit complete
OFF Heap Size: 172300 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 78592 deinit start
deinit complete
OFF Heap Size: 169476 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 75776 deinit start
deinit complete
OFF Heap Size: 166644 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 72936 deinit start
deinit complete
OFF Heap Size: 163812 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 70084 deinit start
deinit complete
OFF Heap Size: 160976 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 67260 deinit start
deinit complete
OFF Heap Size: 158132 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 64420 deinit start
deinit complete
OFF Heap Size: 155300 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 61592 deinit start
deinit complete
OFF Heap Size: 152468 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 58764 deinit start
deinit complete
OFF Heap Size: 149636 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 55948 deinit start
deinit complete
OFF Heap Size: 146804 init start
create Service
create Characteristic
pService start
init complete
ON Heap Size: 53116 deinit start
deinit complete
OFF Heap Size: 143972 init start
create Service
create Characteristic
pService start
Guru Meditation Error: Core 1 panic'ed (StoreProhibited). Exception was unhandled.
Core 1 register dump:
PC : 0x4000c2e4 PS : 0x00060330 A0 : 0x8010227d A1 : 0x3ffc8560
A2 : 0x00000000 A3 : 0x3ffffb58 A4 : 0x00000300 A5 : 0x00000000
A6 : 0xc331914b A7 : 0x8fccc5c9 A8 : 0x00000000 A9 : 0x3ffc8500
A10 : 0x00000000 A11 : 0x00001800 A12 : 0x00000000 A13 : 0x00000003
A14 : 0x00060f20 A15 : 0x00000000 SAR : 0x00000018 EXCCAUSE: 0x0000001d
EXCVADDR: 0x00000000 LBEG : 0x4000c2e0 LEND : 0x4000c2f6 LCOUNT : 0x0000002f
Backtrace: 0x4000c2e4:0x3ffc8560 0x4010227a:0x3ffc8570 0x400fd376:0x3ffc8590 0x400fa861:0x3ffc85c0 0x400d239e:0x3ffc8620 0x400d3a66:0x3ffc8660 0x400d1963:0x3ffc8680 0x400d1a20:0x3ffc86c0 0x400d6fd1:0x3ffc86e0 0x4008e089:0x3ffc8700
Rebooting...
ets Jun 8 2016 00:22:57
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4
load:0x40078000,len:9720
ho 0 tail 12 room 4
load:0x40080400,len:6352
entry 0x400806b8