我一直致力于使用 ESP32 库创建 Wi-Fi 管理器组件。但是,我遇到了一个错误,在过去的三天里我一直无法解决。我感到沮丧并寻求帮助以了解我可能做错了什么。
我有一个 GitHub 存储库,我在其中共享了 core_wifim.c 文件的代码:GitHub 存储库
在我的代码中,我有一个主函数,用于初始化 NVS 分区、打开 Wi-Fi,并尝试使用 wifim_connect_ap 函数连接到 Wi-Fi 网络。主要功能如下:
void app_main(void)
{
esp_err_t ret = ESP_FAIL;
/* Initialize NVS partition */
ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND)
{
/* NVS partition was truncated and needs to be erased */
ESP_ERROR_CHECK(nvs_flash_erase());
/* Retry nvs_flash_init */
ESP_ERROR_CHECK(nvs_flash_init());
}
ret = wifim_wifi_on();
if (ret != ESP_OK)
{
return;
}
wifi_config_t wifi_config;
memset(&wifi_config, 0, sizeof(wifi_config_t));
// Copy the SSID and password to the wifi_config structure
strncpy((char *)wifi_config.sta.ssid, WIFI_SSID, sizeof(wifi_config.sta.ssid) - 1);
wifi_config.sta.ssid[sizeof(wifi_config.sta.ssid) - 1] = '\0'; // Ensure null-terminated string
strncpy((char *)wifi_config.sta.password, WIFI_PASSKEY, sizeof(wifi_config.sta.password) - 1);
wifi_config.sta.password[sizeof(wifi_config.sta.password) - 1] = '\0'; // Ensure null-terminated string
wifi_config.sta.channel = 0;
wifi_config.sta.threshold.authmode = WIFI_AUTH_WPA_WPA2_PSK;
ret = wifim_connect_ap(&wifi_config);
if (ret == ESP_OK)
{
// Connection successful
ESP_LOGI(TAG, "Connection successful");
}
else
{
// Connection failed, handle the error
ESP_LOGI(TAG, "Connection failed %s", esp_err_to_name(ret));
}
return;
}
当我运行代码时,我收到以下错误日志:
I (0) cpu_start: App cpu up.
I (371) cpu_start: Pro cpu start user code
I (371) cpu_start: cpu freq: 160000000
...
assert failed: xQueueSemaphoreTake queue.c:1545 (( pxQueue ))
Setting breakpoint at 0x400819e9 and returning...
0x400819e9: panic_abort at /home/raghav/workspace/esp/esp-idf/components/esp_system/panic.c:402
我尝试了不同的方法来修复此错误,但没有一个成功。如果您能提供解决此问题的任何帮助或指导,我将不胜感激。
esp-idf:v4.4 ESP32 模块。
提前感谢您的帮助!
在我的例子中,它是未初始化的QueueHandle_t xQueue,断言来自这里:https://github.com/espressif/esp-idf/blob/v4.4.5/components/freertos/queue.c#L1545