- 1、如果选用BLE模式就要在初始化之前先释放CLASSIC模式的内存。是因为在配置BLE之前会调用esp_bt_controller_init()函数来初始化bt的协议栈,而我们针对bt的初始化用的的内存空间是固定的,那么在调用初始化bt之前先把CLASSIC部分会用到的内存给释放掉,再在初始化bt的时候,初始化函数就会发现CLASSIC这部分的内存被释放掉了,也就不会初始化对应的内容;但是如果在初始化函数之后再去释放CLASSIC对应内存的时候,当然就会发生内存踩踏事件(esp_bt_controller_init()这个函数并不知道你要用BLE还是CLASSIC)。
- 2、你说的用BLE模式来初始化BLE内存,其实就相当于上面初始化过程的一个封装,其实你也可以在此基础上自己去再做一层封装 :D
Code: Select all
void app_main(void)
{
esp_err_t ret;
// Initialize NVS
ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
ESP_ERROR_CHECK(nvs_flash_erase());
ret = nvs_flash_init();
}
ESP_ERROR_CHECK( ret );
initialise_wifi();
ESP_ERROR_CHECK(esp_bt_controller_mem_release(ESP_BT_MODE_CLASSIC_BT));
esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT();
ret = esp_bt_controller_init(&bt_cfg);
if (ret) {
BLUFI_ERROR("%s initialize bt controller failed: %s\n", __func__, esp_err_to_name(ret));
}
ret = esp_bt_controller_enable(ESP_BT_MODE_BLE);
if (ret) {
BLUFI_ERROR("%s enable bt controller failed: %s\n", __func__, esp_err_to_name(ret));
return;
}
ret = esp_blufi_host_and_cb_init(&example_callbacks);
if (ret) {
BLUFI_ERROR("%s initialise failed: %s\n", __func__, esp_err_to_name(ret));
return;
}
BLUFI_INFO("BLUFI VERSION %04x\n", esp_blufi_get_version());
}