ESP32C6&C5 如何更方便地确认 ULP 程序的实际尺寸?

id9502
Posts: 2
Joined: Mon Jun 16, 2025 10:14 am

ESP32C6&C5 如何更方便地确认 ULP 程序的实际尺寸?

Postby id9502 » Mon Aug 18, 2025 2:56 pm

在编程 ULP 程序时,截止目前(idf6.0)仍需要在 ULP_COPROC_RESERVE_MEM 中明确指定最大尺寸之后编译程序,这个尺寸在生成的.S文件中不论实际程序大小直接占满,富余的空间看起来是用作栈使用,在程序编程时由于程序本身占用的尺寸不定,栈的最大大小也不好估测,实际使用时随函数调用深度变化会出现不好检查的栈溢出问题。

目前在 idf 中,ULP 程序的实际尺寸并不能方便地获取(idf 中的 size,size-component,size-file 显示的尺寸仍是 ULP_COPROC_RESERVE_MEM 指定的最大尺寸,不是实际程序占用的尺寸),想要选取合适的 ULP 程序最大尺寸值需要反复试错很不便捷。
对此,我现在只能通过使用

Code: Select all

readelf -S {CMAKE_PROJ_DIR}/build/esp-idf/{PROJ_NAME}/ulp_{PROJ_NAME}/ulp_{PROJ_NAME}.elf
并计算其中 .vector,.text,.data,.bss,.shared_mem 段来统计它实际占用的存储情况,不知道后续是否能在 idf 中的 size 命令中集成提供对 ULP 程序的实际占用尺寸计算,或者添加例如 size-extra 之类的单独指令来提供类似的功能?

另外,在 ULP 相关的 menuconfig 中,现有的表述没有提到这块预分配的内存的后部未使用空间用于 ULP 处理器栈,是否考虑将程序大小变为自动判断,然后把 ULP_COPROC_RESERVE_MEM 更改为 ULP_COPROC_MAX_STACK_SIZE 之类更清晰的表述?

Who is online

Users browsing this forum: Applebot, Bytespider and 3 guests