esp32之freertos
既然用了操作系统,那很明显就是多线程(多任务)啦,而BLE来说,最少需要两个线程
controller层与host层两个线程处理,所以在主线程中会把这两个给初始化了。
由于没有找到源码细节,所以这是我猜的,根据nrf52832开源的协议栈nimble猜的,
他就是这种方式处理的。
流程
app_main()中的初始化
依次初始化 外设、controller层 host层,然后设置。
void app_main(void)
{ //外设
ESP_ERROR_CHECK(nvs_flash_init());
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();
//controller层
esp_bt_controller_init(&bt_cfg);
esp_bt_controller_enable(ESP_BT_MODE_BLE);
//host层
esp_eddystone_init();
//设置BLE
/*<! set scan parameters */
esp_ble_gap_set_scan_params(&ble_scan_params);
}
host层初始化函数
void esp_eddystone_init(void)
{ //bluedroid初始化
esp_bluedroid_init();
//bluedroid使能
esp_bluedroid_enable();
//注册回调函数
esp_eddystone_appRegister();
}