[core] Keep scheduler dump cancelled marker string in flash on ESP8266 (#18906)

This commit is contained in:
J. Nick Koston
2026-08-31 13:27:53 -05:00
committed by GitHub
parent 1ba1aebfa1
commit ea1e0c6f68
2 changed files with 10 additions and 9 deletions
+8 -7
View File
@@ -193,7 +193,7 @@ void HOT Scheduler::set_timer_common_(Component *component, SchedulerItem::Type
}
#ifdef ESPHOME_DEBUG_SCHEDULER
this->debug_log_timer_(item, name_type, static_name, hash_or_id, type, delay, now_64);
this->debug_log_timer_(item, name_type, static_name, hash_or_id, delay, now_64);
#endif /* ESPHOME_DEBUG_SCHEDULER */
}
@@ -438,9 +438,10 @@ uint32_t HOT Scheduler::call(uint32_t now) {
SchedulerNameLog name_log;
bool is_cancelled = is_item_removed_(item);
ESP_LOGD(TAG, " %s '%s/%s' interval=%" PRIu32 " next_execution in %" PRIu64 "ms at %" PRIu64 "%s",
item->get_type_str(), LOG_STR_ARG(item->get_source()),
LOG_STR_ARG(item->get_type_str()), LOG_STR_ARG(item->get_source()),
name_log.format(item->get_name_type(), item->get_name(), item->get_name_hash_or_id()), item->interval,
item->get_next_execution() - now_64, item->get_next_execution(), is_cancelled ? " [CANCELLED]" : "");
item->get_next_execution() - now_64, item->get_next_execution(),
is_cancelled ? LOG_STR_LITERAL(" [CANCELLED]") : LOG_STR_LITERAL(""));
old_items.push_back(item);
}
@@ -512,7 +513,7 @@ uint32_t HOT Scheduler::call(uint32_t now) {
{
SchedulerNameLog name_log;
ESP_LOGV(TAG, "Running %s '%s/%s' with interval=%" PRIu32 " next_execution=%" PRIu64 " (now=%" PRIu64 ")",
item->get_type_str(), LOG_STR_ARG(item->get_source()),
LOG_STR_ARG(item->get_type_str()), LOG_STR_ARG(item->get_source()),
name_log.format(item->get_name_type(), item->get_name(), item->get_name_hash_or_id()), item->interval,
item->get_next_execution(), now_64);
}
@@ -794,7 +795,7 @@ void Scheduler::trim_freelist() {
#ifdef ESPHOME_DEBUG_SCHEDULER
void Scheduler::debug_log_timer_(const SchedulerItem *item, NameType name_type, const char *static_name,
uint32_t hash_or_id, SchedulerItem::Type type, uint32_t delay, uint64_t now) {
uint32_t hash_or_id, uint32_t delay, uint64_t now) {
// Validate static strings in debug mode
if (name_type == NameType::STATIC_STRING && static_name != nullptr) {
validate_static_string(static_name);
@@ -802,8 +803,8 @@ void Scheduler::debug_log_timer_(const SchedulerItem *item, NameType name_type,
// Debug logging
SchedulerNameLog name_log;
const char *type_str = (type == SchedulerItem::TIMEOUT) ? "timeout" : "interval";
if (type == SchedulerItem::TIMEOUT) {
const char *type_str = LOG_STR_ARG(item->get_type_str());
if (item->type == SchedulerItem::TIMEOUT) {
ESP_LOGD(TAG, "set_%s(name='%s/%s', %s=%" PRIu32 ")", type_str, LOG_STR_ARG(item->get_source()),
name_log.format(name_type, static_name, hash_or_id), type_str, delay);
} else {
+2 -2
View File
@@ -254,7 +254,7 @@ class Scheduler {
// This is correct because millis_major_ that creates these values is also 16 bits.
next_execution_high_ = static_cast<uint16_t>(value >> 32);
}
constexpr const char *get_type_str() const { return (type == TIMEOUT) ? "timeout" : "interval"; }
const LogString *get_type_str() const { return (type == TIMEOUT) ? LOG_STR("timeout") : LOG_STR("interval"); }
// The owning component, or nullptr for SELF_POINTER items (whose slot holds source_name instead).
// All component access goes through this so SELF_POINTER items read as component-less.
Component *get_component() const { return name_type_ == NameType::SELF_POINTER ? nullptr : component; }
@@ -404,7 +404,7 @@ class Scheduler {
#ifdef ESPHOME_DEBUG_SCHEDULER
// Helper for debug logging in set_timer_common_ - extracted to reduce code size
void debug_log_timer_(const SchedulerItem *item, NameType name_type, const char *static_name, uint32_t hash_or_id,
SchedulerItem::Type type, uint32_t delay, uint64_t now);
uint32_t delay, uint64_t now);
#endif /* ESPHOME_DEBUG_SCHEDULER */
#ifndef ESPHOME_THREAD_SINGLE