ESP32 上的 Wi-Fi 管理器组件 - xQueueSemaphoreTake 断言失败

问题描述 投票:0回答:1

我一直致力于使用 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 模块。

提前感谢您的帮助!

freertos esp-idf
1个回答
0
投票

在我的例子中,它是未初始化的QueueHandle_t xQueue,断言来自这里:https://github.com/espressif/esp-idf/blob/v4.4.5/components/freertos/queue.c#L1545

© www.soinside.com 2019 - 2024. All rights reserved.