https://github.com/espressif/esp-dev-ki ... etting.cpp
这个设置文件的第473-481行
整个函数代码,中typedef enum {
WIFI_EVENT_CONNECTED = BIT(0),
WIFI_EVENT_INIT_DONE = BIT(1),
WIFI_EVENT_UI_INIT_DONE = BIT(2),
WIFI_EVENT_SCANING = BIT(3)
} wifi_event_id_t;
esp_err_t AppSettings::initWifi()
{
s_wifi_event_group = xEventGroupCreate();
xEventGroupClearBits(s_wifi_event_group, WIFI_EVENT_CONNECTED);
xEventGroupClearBits(s_wifi_event_group, WIFI_EVENT_INIT_DONE);
xEventGroupClearBits(s_wifi_event_group, WIFI_EVENT_SCANING);
if(!(xEventGroupGetBits(s_wifi_event_group) & WIFI_EVENT_UI_INIT_DONE)) {
xEventGroupClearBits(s_wifi_event_group, WIFI_EVENT_UI_INIT_DONE);
}
ESP_ERROR_CHECK(esp_netif_init());
ESP_ERROR_CHECK(esp_event_loop_create_default());
esp_netif_t *sta_netif = esp_netif_create_default_wifi_sta();
assert(sta_netif);
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
esp_event_handler_instance_t instance_any_id;
ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,
ESP_EVENT_ANY_ID,
&wifiEventHandler,
this,
&instance_any_id));
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
ESP_ERROR_CHECK(esp_wifi_start());
return ESP_OK;
}
为什么要进行这样一个if判断呢,这个把本来是0的位置标记为0是为什么呢,是因为要防御某些bug还是单纯打错了xEventGroupClearBits(s_wifi_event_group, WIFI_EVENT_CONNECTED);
xEventGroupClearBits(s_wifi_event_group, WIFI_EVENT_INIT_DONE);
xEventGroupClearBits(s_wifi_event_group, WIFI_EVENT_SCANING);
if(!(xEventGroupGetBits(s_wifi_event_group) & WIFI_EVENT_UI_INIT_DONE)) {
xEventGroupClearBits(s_wifi_event_group, WIFI_EVENT_UI_INIT_DONE);
}