在app_main() 中无法使用大于3584 字节的数据类型

xutengl
Posts: 2
Joined: Thu Jun 01, 2023 11:44 pm

在app_main() 中无法使用大于3584 字节的数据类型

Postby xutengl » Thu Jun 01, 2023 11:57 pm

以下代码中,int_array 的大小为3585字节,可以编译,但运行时esp32会持续重启。
如果把int_array 减小一个字节,则不会一直重启。
如果把int_array定义为全局变量或者用动态内存分配,则不会出现问题。
请问这是为什么?
PS: esp-idf 版本 5.0.1,
  1. #include "freertos/FreeRTOS.h"
  2. #include "freertos/task.h"
  3. #include <stdio.h>
  4.  
  5. void app_main(void)
  6. {
  7.     uint8_t int_array[3585] = {0};
  8.  
  9.     while (1)
  10.     {
  11.         int_array[0]++;
  12.         array[0]++;
  13.         printf("static array size: %d, count: %d\n", (unsigned int)sizeof(int_array), (unsigned int)int_array[0]);
  14.         vTaskDelay(pdMS_TO_TICKS(1000));
  15.     }
  16. }

ESP_LiuH
Posts: 42
Joined: Fri Feb 10, 2023 7:20 am

Re: 在app_main() 中无法使用大于3584 字节的数据类型

Postby ESP_LiuH » Tue Jun 06, 2023 11:33 am

1. app_main 是运行在 main_task 任务中,见如下链接 https://github.com/espressif/esp-idf/bl ... mon.c#L131
2. 创建 main_task ,见如下链接 https://github.com/espressif/esp-idf/bl ... mmon.c#L72
3. app_main 中处理的数组大小取决于 ESP_TASK_MAIN_STACK ,具体配置见 CONFIG_ESP_MAIN_TASK_STACK_SIZE,默认是 3584,见如下链接 https://github.com/espressif/esp-idf/bl ... onfig#L168

Who is online

Users browsing this forum: No registered users and 29 guests