mirror of
https://github.com/esphome/esphome.git
synced 2024-12-22 05:24:53 +01:00
More scheduler fixes
This commit is contained in:
parent
840f599631
commit
6c493d10d2
1 changed files with 19 additions and 14 deletions
|
@ -84,27 +84,32 @@ void ICACHE_RAM_ATTR HOT Scheduler::call() {
|
||||||
|
|
||||||
// Uncomment for debugging the scheduler:
|
// Uncomment for debugging the scheduler:
|
||||||
|
|
||||||
// if (random_uint32() % 400 == 0) {
|
// if (random_uint32() % 400 == 0) {
|
||||||
// std::vector<SchedulerItem *> old_items = this->items_;
|
// std::vector<SchedulerItem *> old_items = this->items_;
|
||||||
// ESP_LOGVV(TAG, "Items: (%u)", this->items_.size());
|
// ESP_LOGVV(TAG, "Items: count=%u, now=%u", this->items_.size(), now);
|
||||||
// while (!this->empty_()) {
|
// while (!this->empty_()) {
|
||||||
// auto *item = this->items_[0];
|
// auto *item = this->items_[0];
|
||||||
// const char *type = item->type == SchedulerItem::INTERVAL ? "interval" : "timeout";
|
// const char *type = item->type == SchedulerItem::INTERVAL ? "interval" : "timeout";
|
||||||
// ESP_LOGVV(TAG, " %s '%s' interval=%u last_execution=%u next=%u",
|
// ESP_LOGVV(TAG, " %s '%s' interval=%u last_execution=%u (%u) next=%u",
|
||||||
// type, item->name.c_str(), item->interval, item->last_execution, item->last_execution +
|
// type, item->name.c_str(), item->interval, item->last_execution, item->last_execution_major,
|
||||||
// item->interval);
|
// item->last_execution + item->interval);
|
||||||
// this->pop_raw_();
|
// this->pop_raw_();
|
||||||
// }
|
|
||||||
// ESP_LOGVV(TAG, "\n");
|
|
||||||
// this->items_ = old_items;
|
|
||||||
// }
|
// }
|
||||||
|
// ESP_LOGVV(TAG, "\n");
|
||||||
|
// this->items_ = old_items;
|
||||||
|
//}
|
||||||
|
|
||||||
while (!this->empty_()) {
|
while (!this->empty_()) {
|
||||||
// Don't copy-by value yet
|
// Don't copy-by value yet
|
||||||
auto *item = this->items_[0];
|
auto *item = this->items_[0];
|
||||||
if ((now - item->last_execution) < item->interval || item->last_execution_major != this->millis_major_)
|
if ((now - item->last_execution) < item->interval)
|
||||||
// Not reached timeout yet, done for this call
|
// Not reached timeout yet, done for this call
|
||||||
break;
|
break;
|
||||||
|
uint8_t major = item->last_execution_major;
|
||||||
|
if (item->last_execution + item->interval < item->last_execution)
|
||||||
|
major++;
|
||||||
|
if (major != this->millis_major_)
|
||||||
|
break;
|
||||||
|
|
||||||
// Don't run on failed components
|
// Don't run on failed components
|
||||||
if (item->component != nullptr && item->component->is_failed()) {
|
if (item->component != nullptr && item->component->is_failed()) {
|
||||||
|
|
Loading…
Reference in a new issue