ESP32入门基础之资源管理

1 ESP32-DevKitC V4(ESP32-WROVER-E&IE)板载信息

  1. ESP32-DevKitC V4 入门指南
  2. esp32-devkitc开发板参数对比

2 ESP32-DevKitC V4(ESP32-WROVER-E&IE)板载资源

2.1 在工程中使用函数查询可用堆大小等信息

  1. 在工程中使用函数查询可用堆大小等信息

        esp_chip_info_t chip_info;
        esp_chip_info(&chip_info);
        printf("This is %s chip with %d CPU core(s), WiFi%s%s, ",
                CONFIG_IDF_TARGET,
                chip_info.cores,
                (chip_info.features & CHIP_FEATURE_BT) ? "/BT" : "",
                (chip_info.features & CHIP_FEATURE_BLE) ? "/BLE" : "");
    
        printf("silicon revision %d, ", chip_info.revision);
    
        printf("%dMB %s flash\n", spi_flash_get_chip_size() / (1024 * 1024),
                (chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");
    
        printf("free heap size: %d bytes\n", esp_get_free_heap_size());
        printf("free internal heap size: %d bytes\n", esp_get_free_internal_heap_size());
        printf("Minimum free heap size: %d bytes\n", esp_get_minimum_free_heap_size());
    

    串口显示
    在这里插入图片描述

2.2 在PowerShell使用指令esptool.py -p COM* flash_id 查询模组实际flash大小和芯片信息等数据

  1. 在PowerShell使用指令esptool.py -p COM* flash_id 查询模组实际flash大小和芯片信息等数据
    在这里插入图片描述

2.3 查询外部PSRAM信息

  1. 查询外部PSRAM信息
    先选择支持外部RAM,打开menuconfig菜单配置
    在这里插入图片描述 再重新编译,烧录程序并打开串口数据
    在这里插入图片描述也可以在工程中调用相应函数查询
    在这里插入图片描述

2.4 在PowerShell使用指令 idf.py size 打印应用程序相关的大小信息

在这里插入图片描述

3 FreeRTOS任务内存使用监控

参考文章
FreeRTOS 接口: vTaskList() - 可优化内存和 task 栈溢出定位
FreeRTOS 接口: vTaskGetRunTimeStats() - 可解决 task watchdog 和调优 task 优先级

  1. 如图勾选
    在这里插入图片描述

  2. 编写测试程序

void esp_print_tasks(void)
{
    char *runtimeinfo = (char *)calloc(1, 512);
    char *pbuffer = (char *)calloc(1, 2048);
    printf("--------------- heap:%lu ---------------------\r\n", esp_get_free_heap_size());
    vTaskList(pbuffer);
    printf("%s", pbuffer);
    vTaskGetRunTimeStats(runtimeinfo);
    printf("%s", runtimeinfo);
    printf("----------------------------------------------\r\n");
    free(pbuffer);
    free(runtimeinfo);
}

void test_task(void *param)
{
    while (1)
    {
        esp_print_tasks();
        vTaskDelay(3000 / portTICK_PERIOD_MS);
    }
}

void app_user_log_main(void)
{
    xTaskCreate(test_task, "test_task", 2048, NULL, 5, NULL);
}
  1. 编译烧录并打开串口
    在这里插入图片描述

注意,该方法要长时间监控才比较准确
第一列表示 task name, 即 xTaskCreate 传递进去的第二个参数, 如果名称过长, 会根据 configMAX_TASK_NAME_LEN 截断
第二列表示 task 当前执行状态
X: running
B: blocked
R: ready
D: deleted
S: suspended
详细参考 task.c 中
第三列表示 task 优先级, 即 xTaskCreate 传递进去的第四个参数
第四列表示该 task 运行过程中, 最小时候还剩余多少内存, 字节为单位.
如果剩余内存较多, 修改 xTaskCreate 第三个参数, 即可节省内存
第五列表示 task 创建顺序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值