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();
}

main线程自删除

在这里插入图片描述

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐