ESP32 Lyra错误:大师冥想错误核心1负载被禁止

时间:2019-03-18 21:49:59

标签: c makefile eclipse-cdt fwrite esp32

我正在尝试将多个esp-idf和esp-adf项目组合为一个项目,以便能够从url下载mp3文件。我已经遍历了esp32网站上的示例,并尝试搜索类似的解决方案或示例,但无济于事。 当它检测到数据块时,我试图通过fwrite写入sd卡,但不断收到错误并将错误排除到fwrite本身。 我不确定我是否传递了错误的指针,因为我尝试了所有可以使它起作用的方法,甚至解决了与缓冲区大小或任务堆栈大小有关但未更改的问题。 我正在公开我的代码,并希望有人能解决为什么它不起作用的问题,或者对如何解决此问题有任何建议。

esp_err_t _http_event_handler(esp_http_client_event_t *evt)
{
    switch(evt->event_id) {
        case HTTP_EVENT_ERROR:
            ESP_LOGD(TAG, "HTTP_EVENT_ERROR");
            break;
        case HTTP_EVENT_ON_CONNECTED:
            ESP_LOGD(TAG, "HTTP_EVENT_ON_CONNECTED");
            break;
        case HTTP_EVENT_HEADER_SENT:
            ESP_LOGD(TAG, "HTTP_EVENT_HEADER_SENT");
            break;
        case HTTP_EVENT_ON_HEADER:
            ESP_LOGD(TAG, "HTTP_EVENT_ON_HEADER, key=%s, value=%s", evt->header_key, evt->header_value);
            break;
        case HTTP_EVENT_ON_DATA:
            ESP_LOGD(TAG, "HTTP_EVENT_ON_DATA, len=%d", evt->data_len);
            if (!esp_http_client_is_chunked_response(evt->client)) {
        if(check==0){

        check=1;

        FILE* f = fopen("/sdcard/hayden.mp3", "wb");

        }

                 //Write out data
                 //printf("%.*s", evt->data_len, (char*)evt->data);

        //fwrite(evt->data,MAX_HTTP_RECV_BUFFER,1,f);

        //printf("%.*s",evt->data);

        fwrite(evt->data,evt->data_len,1,f);
        //break;    


            }

            break;
        case HTTP_EVENT_ON_FINISH:
            ESP_LOGD(TAG, "HTTP_EVENT_ON_FINISH");
            break;
        case HTTP_EVENT_DISCONNECTED:
            ESP_LOGD(TAG, "HTTP_EVENT_DISCONNECTED");
            break;
    }
    return ESP_OK;
}


static void http_moj_test()
{   //
    esp_http_client_config_t config = {
        .url = "http://www.hochmuth.com/mp3/Haydn_Cello_Concerto_D-1.mp3",
        .event_handler = _http_event_handler,
    };
    //
    esp_http_client_handle_t client = esp_http_client_init(&config);
        esp_err_t err = esp_http_client_perform(client);
    //error checking
    if (err == ESP_OK) {
        ESP_LOGI(TAG,"Status=%d, content_lenght=%d", esp_http_client_get_status_code(client),
                    esp_http_client_get_content_length(client));

    }
    //free mem
    printf("func end ");
    esp_http_client_cleanup(client);
    return;

}

static void http_test_task(void *pvParameters)
{
    app_wifi_wait_connected();
    ESP_LOGI(TAG, "Connected to AP, begin http example");
    http_moj_test();
    fclose(f);
        ESP_LOGI(TAG, "Finish http example");
    //fwrite(pointer,sizeof(char),1,f);
    //fclose(f);
        vTaskDelete(NULL);

    }


void app_main()
{
    esp_err_t let = nvs_flash_init();
    if (let == ESP_ERR_NVS_NO_FREE_PAGES || let == ESP_ERR_NVS_NEW_VERSION_FOUND) {
      ESP_ERROR_CHECK(nvs_flash_erase());
      let = nvs_flash_init();
    }
    ESP_ERROR_CHECK(let);
    app_wifi_initialise();
    esp_periph_config_t periph_cfg = { 0 };
        esp_periph_init(&periph_cfg);
        periph_sdcard_cfg_t sdcard_cfg = {
                .root = "/sdcard",
                .card_detect_pin = SD_CARD_INTR_GPIO,   // GPIO_NUM_34
            };
            esp_periph_handle_t sdcard_handle = periph_sdcard_init(&sdcard_cfg);
            esp_periph_start(sdcard_handle);
            while (!periph_sdcard_is_mounted(sdcard_handle)) {
                    vTaskDelay(100 / portTICK_PERIOD_MS);
                }
            printf("SD CARD MOUNTED");
                FILE* f = fopen("/sdcard/hayden.mp3", "wb");

            xTaskCreate(&http_test_task, "http_test_task", 8192*3, NULL, 5, NULL);


    printf("TASK COMPLETED");

    esp_periph_stop_all();
    esp_periph_destroy();
}

0 个答案:

没有答案
相关问题