优化 Timer too close 错误停机问题
This commit is contained in:
parent
5875595331
commit
9fcfff3b81
11
src/sched.c
11
src/sched.c
@ -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.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user