esp-idf 任务堆栈监控报错

前言

在使用esp32s3 开发的时候,项目使用了freeRTOS
如果我们创建了很多任务,由于系统给任务分配了堆栈,我们如果想要实时监控堆栈的使用情况
就需要通过内核提供的任务监控函数定时打印,各个任务的堆栈详情。

遇到问题

通过下面的代码,


#include "freertos/FreeRTOSConfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "freertos/event_groups.h"
#include "freertos/task.h"
#include "freertos/queue.h"
 
void app_main()
{


    init_hardware();

    while (1)
    {
        vTaskDelay(pdMS_TO_TICKS(199));
 
        
        if(++stack_cnt>36)
        {
            stack_cnt=0;
            //istack = uxTaskGetStackHighWaterMark(pxexe_task);
            //printf("pxexe_task istack = %d\n", istack);
            //istack = uxTaskGetStackHighWaterMark(pxmytime_deal_task);
            //printf("pxexe_task istack = %d\n", istack);
            
            memset(CPU_RunInfo,0,400);
            vTaskList((char*)CPU_RunInfo);
            printf("----------------------------------------------------\r\n");
            printf("task_name    status  priority less_stack T_id Core\r\n");
            printf("%s", CPU_RunInfo);
        }
        
    }
}

排查错误

Bootloader binary size 0x5800 bytes. 0x2800 bytes (31%) free.
[5/7] Linking CXX executable SAMPLE_PROJECT.elf
FAILED: SAMPLE_PROJECT.elf 
cmd.exe /C "cd . && D:\espressif\tools\tools\xtensa-esp-elf\esp-13.2.0_20230928\xtensa-esp-elf\bin\xtensa-esp32s3-elf-g++.exe -mlongcalls  -fno-builtin-memcpy -fno-builtin-memset -fno-builtin-bzero -fno-builtin-stpcpy -fno-builtin-strncpy -Wl,--cref -Wl,--defsym=IDF_TARGET_ESP32S3=0 -Wl,--Map=D:/esp32/yuhu_a539/fixDriver/sample_project/build/SAMPLE_PROJECT.map -Wl,--no-warn-rwx-segments -fno-rtti -fno-lto -Wl,--gc-sections -Wl,--warn-common -T esp32s3.peripherals.ld -T esp32s3.rom.ld -T esp32s3.rom.api.ld -T esp32s3.rom.libgcc.ld -T esp32s3.rom.newlib.ld -T esp32s3.rom.version.ld -T memory.ld -T sections.ld @CMakeFiles\SAMPLE_PROJECT.elf.rsp -o SAMPLE_PROJECT.elf  && cd ."
D:/espressif/tools/tools/xtensa-esp-elf/esp-13.2.0_20230928/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: esp-idf/main/libmain.a(main.c.obj):(.literal.app_main+0x34): undefined reference to `vTaskList'
D:/espressif/tools/tools/xtensa-esp-elf/esp-13.2.0_20230928/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: esp-idf/main/libmain.a(main.c.obj): in function `app_main':
D:/esp32/yuhu_a539/fixDriver/sample_project/main/main.c:134:(.text.app_main+0xb7): undefined reference to `vTaskList'
collect2.exe: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.

从报错信息来看,就是vTaskList未定义

然后我直接ctrl 单击函数进入,发现这个函数虽然内核有些,但是被宏定义屏蔽了

所以解决方法就是,手动打开这个宏定义

在这里插入图片描述

解决

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值