Feat: lab 3
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
#include <timer.h>
|
||||
#include <interrupt.h>
|
||||
#include <logger.h>
|
||||
#include <utils.h>
|
||||
#include <kmalloc.h>
|
||||
@@ -14,10 +15,10 @@ uint32_t _d(timer_t *t)
|
||||
{ return t ? t->_d : 0; }
|
||||
|
||||
static inline
|
||||
void _swap(timer_t *a, timer_t *b)
|
||||
void _swap(timer_t **a, timer_t **b)
|
||||
{
|
||||
timer_t *tmp = a;
|
||||
a = b, b = tmp;
|
||||
timer_t *tmp = *a;
|
||||
*a = *b, *b = tmp;
|
||||
}
|
||||
|
||||
static inline
|
||||
@@ -27,11 +28,11 @@ timer_t *_merge(timer_t *a, timer_t *b)
|
||||
return a ?: b;
|
||||
|
||||
if (a->data.firing_tick > b->data.firing_tick)
|
||||
_swap(a, b);
|
||||
_swap(&a, &b);
|
||||
a->_r = _merge(a->_r, b);
|
||||
|
||||
if (_d(a->_l) < _d(a->_r))
|
||||
_swap(a->_l, a->_r);
|
||||
_swap(&a->_l, &a->_r);
|
||||
|
||||
a->_d = _d(a->_r) + 1;
|
||||
return a;
|
||||
@@ -87,7 +88,7 @@ void timer_irq_handler(void)
|
||||
DEBUG_EXCEP(cntpct_el0);
|
||||
|
||||
if (global_timer) {
|
||||
global_timer->data.func(global_timer->data.param);
|
||||
add_interrupt_task(20, global_timer->data.func, global_timer->data.param);
|
||||
global_timer = _pop(global_timer);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user