乐鑫技术交流
直播中

李雪

7年用户 892经验值
私信 关注
[问答]

使用esp_http_client_init()函数时,运行时会报错,为什么?

就是我在使用esp_http_client_init()函数时,运行时会报错,板子不断reboot,这是什么原因导致的,有什么解决的办法吗?
以下是我调用esp_http_client_init()的相关函数
    esp_http_client_config_t config;
    config.event_handler = ocr_http_event_handler;
    config.buffer_size = 4 * 1024;
    config.timeout_ms = 4000;

    config.url  = temp_url.c_str();
    Serial.print("config.url = ");
    Serial.println(config.url);

    esp_http_client_handle_t client = esp_http_client_init(&config);
    esp_http_client_set_method(client, HTTP_METHOD_POST);
    esp_http_client_set_header(client, "Content-Type", "application/x-www-form-urlencoded");
    esp_http_client_set_post_field(client, temp_url.c_str(), sizeof(temp_url.c_str()));


以下是报错的内容

Guru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled.
Core 1 register dump:
PC      : 0x4008d858  PS      : 0x00060730  A0      : 0x800d7a48  A1      : 0x3ffb1e00  
A2      : 0x0000000f  A3      : 0x0000000b  A4      : 0x000000ff  A5      : 0x0000ff00  
A6      : 0x00ff0000  A7      : 0xff000000  A8      : 0x00000001  A9      : 0x00000000  
A10     : 0x3ffdf50c  A11     : 0x3f401614  A12     : 0x000000ff  A13     : 0x0000ff00  
A14     : 0x00ff0000  A15     : 0xff000000  SAR     : 0x00000019  EXCCAUSE: 0x0000001c  
EXCVADDR: 0x0000000f  LBEG    : 0x4008d879  LEND    : 0x4008d889  LCOUNT  : 0xfffffffd  

ELF file SHA256: 0000000000000000

Backtrace: 0x4008d858:0x3ffb1e00 0x400d7a45:0x3ffb1e10 0x400d161b:0x3ffb1e30 0x400d1bb9:0x3ffb1ec0 0x400d537c:0x3ffb1fb0 0x400908de:0x3ffb1fd0

以下是错误的出处
C:Users28032AppDataLocalArduino15packagesesp32toolsxtensa-esp32-elf-gcc1.22.0-97-gc752ad5-5.2.0bin>xtensa-esp32-elf-addr2line -e python.ino.elf 0x4008d858:0x3ffb1e00 0x400d7a45:0x3ffb1e10 0x400d161b:0x3ffb1e30 0x400d1bb9:0x3ffb1ec0 0x400d537c:0x3ffb1fb0 0x400908de:0x3ffb1fd0
/home/mak/e/p/newlib_old/newlib_xtensa-bin/newlib_xtensa-2.2.0/xtensa-esp32-elf/newlib/libc/machine/xtensa/../../../../.././newlib/libc/machine/xtensa/strlen.S:46
/home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/esp_http_client/esp_http_client.c:335
C:Users28032DocumentsArduinopython/python.ino:163
C:Users28032DocumentsArduinopython/python.ino:283
C:Users28032AppDataLocalArduino15packagesesp32hardwareesp321.0.6coresesp32/main.cpp:30
/home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/freertos/port.c:355 (discriminator 1)
                                               

回帖(1)

fdvcxhtg

2024-6-13 16:40:59
以下是一些建议和可能的原因:

1. **检查错误处理**:在使用 `esp_http_client_init()` 函数时,您需要检查返回值。如果返回值为 `NULL`,则表示初始化失败。您可以添加以下代码来检查错误:

   ```cpp
   esp_http_client_handle_t client = esp_http_client_init(&config);
   if (client == NULL) {
       Serial.println("Error: HTTP client initialization failed");
       return;
   }
   ```

2. **检查 URL**:确保 `temp_url` 是一个有效的 URL。如果 URL 格式不正确或为空,可能会导致错误。

3. **检查网络连接**:确保您的 ESP32 板子已经连接到网络。如果网络连接不稳定或无法连接,可能会导致 HTTP 请求失败。

4. **检查内存问题**:ESP32 的内存有限,如果内存不足,可能会导致程序崩溃和重启。您可以使用 `esp_get_free_heap_size()` 函数来检查剩余的内存。

5. **检查其他资源问题**:确保您的 ESP32 板子没有其他正在运行的任务或资源冲突,这可能会影响 HTTP 请求的执行。

6. **检查错误日志**:如果您的 ESP32 板子支持打印错误日志,您可以查看日志以获取更多关于错误的信息。

7. **更新 ESP-IDF**:确保您使用的 ESP-IDF 版本是最新的,以避免可能的已知问题。

8. **检查事件处理函数**:您提到使用了 `ocr_http_event_handler` 作为事件处理函数。请确保该函数正确实现了,并且没有导致任何错误。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分