记录一次ESP32报错Guru Meditation Error: Core 1 panic‘ed (Double exception).

发布于:2025-08-03 ⋅ 阅读:(20) ⋅ 点赞:(0)

一、问题描述

需求: ESP32S3单片机,连接一个麦克风读取5s后,编码后发送到百度云进行语音识别。通过freertos框架,将任务放在核1中运行(放在核0同样报错)
问题: 在最后的发送语音数据中,ESP32崩溃重启,显示错误Guru Meditation Error: Core 1 panic’ed (Double exception).
尝试解决: 将任务放在loop()中运行,而不是通过freertos的task运行,可以正常运行。

二、问题解决

  1. 放在loop()中运行
  2. 增加task的任务栈空间大小,从原来的2048增加到20480之后可以正常运行了

三、扩展

后续想要将录音时间增加并发送,例如增加到10s,此时放在loop中也无法运行了。报错如下,怀疑可能式内存不够了。

Guru Meditation Error: Core  1 panic'ed (Interrupt wdt timeout on CPU1). 

四、相关代码

void speech_recognition_send()
{
    assembleJson(token);
    sendToSTT();        // 这一部分中更长的录音时间会导致需要的任务栈空间增加,导致任务崩溃
    Serial.println("Recognition complete");
}

void assembleJson(String token)
{
    memset(data_json, '\0', data_json_len * sizeof(char));
    strcat(data_json, "{");
    strcat(data_json, "\"format\":\"pcm\",");
    strcat(data_json, "\"rate\":16000,");
    strcat(data_json, "\"channel\":1,");
    strcat(data_json, "\"cuid\":\"577200\",");
    strcat(data_json, "\"token\":\"");
    strcat(data_json, token.c_str());
    strcat(data_json, "\",");
    sprintf(data_json + strlen(data_json), "\"len\":%d,", adc_data_len * 2);
    strcat(data_json, "\"speech\":\"");
    strcat(data_json, base64::encode((uint8_t *)adc_data, adc_data_len * sizeof(uint16_t)).c_str());
    strcat(data_json, "\"");
    strcat(data_json, "}");

    // 显示长度
    Serial.println(strlen(data_json));
    // 显示JSON数据的前面部分
    // Serial.println(data_json);
}

void sendToSTT()
{
    // 以下部分会受录音长度影响,超过5s很可能导致内存崩溃重启
    int httpCode;
    http_client.begin("http://vop.baidu.com/server_api");
    http_client.addHeader("Content-Type", "application/json");
    // http_client.addHeader("Accept", "application/json");
    httpCode = http_client.POST(data_json);

    if (httpCode > 0)
    {
        if (httpCode == HTTP_CODE_OK)
        {
            String payload = http_client.getString();
            Serial.println(payload);
        }
    }
    else
    {
        Serial.printf("[HTTP] POST failed, error: %s\n", http_client.errorToString(httpCode).c_str());
    }
    http_client.end();
}


网站公告

今日签到

点亮在社区的每一天
去签到