优化 Timer too close 错误停机问题

This commit is contained in:
张开科 2025-04-30 17:26:42 +08:00
parent 5875595331
commit 9fcfff3b81

View File

@ -86,12 +86,16 @@ void
sched_add_timer(struct timer *add) sched_add_timer(struct timer *add)
{ {
uint32_t waketime = add->waketime; uint32_t waketime = add->waketime;
uint8_t err_flags = 0;
irqstatus_t flag = irq_save(); irqstatus_t flag = irq_save();
struct timer *tl = SchedStatus.timer_list; struct timer *tl = SchedStatus.timer_list;
if (unlikely(timer_is_before(waketime, tl->waketime))) { if (unlikely(timer_is_before(waketime, tl->waketime))) {
// This timer is before all other scheduled timers // This timer is before all other scheduled timers
if (timer_is_before(waketime, timer_read_time())) if (timer_is_before(waketime, timer_read_time())) {
try_shutdown("Timer too close"); err_flags = 1;
waketime = timer_read_time() + timer_from_us(2);
add->waketime = waketime;
}
if (tl == &deleted_timer) if (tl == &deleted_timer)
add->next = deleted_timer.next; add->next = deleted_timer.next;
else else
@ -104,6 +108,9 @@ sched_add_timer(struct timer *add)
insert_timer(tl, add, waketime); insert_timer(tl, add, waketime);
} }
irq_restore(flag); irq_restore(flag);
if(err_flags) {
output("Timer too close");
}
} }
// The deleted timer is used when deleting an active timer. // The deleted timer is used when deleting an active timer.