Files
Guillaume Souchere 0cba1db0ed fix(esp_log): add Kconfig to optionally bypass esp_rom_vprintf
In Log V2, ESP_LOG macros are using the runtime
constrained-environment path in esp_log_vprintf() reference
esp_rom_vprintf as the fallback formatter. On chips where ets_vprintf
is not in ROM (all targets except ESP32-S2 and ESP32-C2), this pulls
~1.2 KB of printf implementation into IRAM.

Add a new Kconfig option LOG_API_CONSTRAINED_ENV_SAFE (default y) that
controls whether this IRAM-resident fallback is used:

Also update the logging and RAM-usage documentation accordingly.

Closes https://github.com/espressif/esp-idf/issues/18346
2026-04-07 12:00:51 +02:00

85 lines
3.9 KiB
Plaintext

menu "Log"
choice LOG_VERSION
prompt "Log version"
default LOG_VERSION_1
help
Select the log version to be used by the ESP log component.
- "V1": This version integrates log formatting into the format string provided by the user.
Logs are processed and formatted during compile time, leading to a larger binary file.
Example: ESP_LOGI("boot", "chip revision: v%d.%d", major, minor);
Output: I (56) boot: chip revision: v3.0
Note: Log strings are stored in Flash with added formatting characters.
Format string on flash: "[0;32mI (%lu) %s: chip revision: v%d.%d [0m"
- "V2": This version centralizes log formatting within the esp_log() function.
User-supplied format strings are stored without added formatting, reducing binary size.
Example: ESP_LOGI("boot", "chip revision: v%d.%d", major, minor);
Output: I (56) boot: chip revision: v3.0
Note: This version supports runtime configuration of formatting and is more flexible,
logging from constrained environments (ex.: ISR, Startup, Cache disabled).
It may consumes a bit more stack and affect performance.
Format string on flash: "chip revision: v%d.%d"
Use V1 for minimal stack usage and simpler implementation.
Use V2 for smaller binary sizes, more flexible log formatting, and advanced features like disabling
colors or timestamps.
config LOG_VERSION_1
bool "V1"
help
Select this option to use Log V1. Recommended for projects with strict stack constraints
or that prioritize performance over flexibility.
config LOG_VERSION_2
bool "V2"
help
Select this option to use Log V2. Recommended for projects that require smaller binaries,
runtime log formatting configuration, or advanced logging features.
endchoice
config LOG_VERSION
int
default 1 if LOG_VERSION_1
default 2 if LOG_VERSION_2
help
This configuration sets the log version number based on the chosen log version.
rsource "./Kconfig.level"
rsource "./Kconfig.format"
rsource "./Kconfig.settings"
config LOG_API_CONSTRAINED_ENV_SAFE
bool "Enable safe ESP_LOGx fallback in constrained environments (ISR, cache disabled)"
depends on LOG_VERSION_2 && !ESP_ROM_HAS_VPRINTF_FUNC && !LOG_MODE_BINARY_EN
default y
help
This option is only relevant on chips where ets_vprintf is NOT in ROM
When enabled, Log V2 routes ESP_DRAM_LOGx, ESP_EARLY_LOGx, and runtime
constrained-environment log calls (ISR, cache disabled) through esp_log(),
which uses esp_rom_vprintf for formatting.
When disabled, ESP_DRAM_LOGx and ESP_EARLY_LOGx expand directly
to esp_rom_printf (a true ROM function with zero IRAM cost), bypassing
esp_log(). Normal ESP_LOGx calls that happen to run in a constrained
environment (ISR, cache disabled) will use the standard vprintf function
instead of esp_rom_vprintf; if the standard vprintf resides in flash,
such calls may crash. Use ESP_DRAM_LOGx for any logging that must work
with cache disabled or from an ISR.
Disable this option to save ~1.2 KB of IRAM on memory-constrained devices.
Enable it if you need ESP_LOGx to safely fall back to ROM-based printing
in ISRs or with cache disabled, or if you need constrained-environment
logs in binary log format.
config LOG_IN_IRAM
bool "Place logging functions in IRAM" if SPI_FLASH_AUTO_SUSPEND
default y
select ESP_ROM_PRINT_IN_IRAM
endmenu