diff --git a/12_day/timer.c b/12_day/timer.c index 0f384d6..77ad20c 100644 --- a/12_day/timer.c +++ b/12_day/timer.c @@ -49,7 +49,7 @@ void timer_init(struct TIMER *timer, struct FIFO8 *fifo, unsigned char data) void timer_settime(struct TIMER *timer, unsigned int timeout) { - timer->timeout = timeout; + timer->timeout = timeout + timerctl.count; timer->flags = TIMER_FLAGS_USING; return; } @@ -61,8 +61,7 @@ void inthandler20(int *esp) timerctl.count++; for (i = 0; i < MAX_TIMER; i++) { if (timerctl.timer[i].flags == TIMER_FLAGS_USING) { - timerctl.timer[i].timeout--; - if (timerctl.timer[i].timeout == 0) { + if (timerctl.timer[i].timeout <= timerctl.count) { timerctl.timer[i].flags = TIMER_FLAGS_ALLOC; fifo8_put(timerctl.timer[i].fifo, timerctl.timer[i].data); }