58,7 → 58,6 |
level_des l; /*+ the standard level descriptor +*/ |
|
TIME replenish_period; |
TIME next_time; |
TIME capacity; |
|
struct timespec act_time; |
65,6 → 64,7 |
|
int avail; |
|
struct timespec replenish_expires; |
int replenish_timer; |
int wcet_timer; |
|
93,7 → 93,6 |
if (INTDRIVE_task == NIL) return; |
|
lev->avail = lev->capacity; |
lev->next_time = lev->replenish_period; |
|
switch (proc_table[INTDRIVE_task].status) { |
|
173,7 → 172,6 |
{ |
|
struct timespec time; |
int temp; |
|
INTDRIVE_level_des *lev = (INTDRIVE_level_des *)(level_table[l]); |
|
181,16 → 179,13 |
kern_event_delete(lev->wcet_timer); |
|
SUBTIMESPEC(&schedule_time, &(lev->act_time), &time); |
temp = TIMESPEC2USEC(&time); |
lev->avail -= TIMESPEC2USEC(&time); |
|
lev->avail -= temp; |
|
} |
|
static void INTDRIVE_public_activate(LEVEL l, PID p) |
{ |
|
struct timespec time; |
INTDRIVE_level_des *lev = (INTDRIVE_level_des *)(level_table[l]); |
|
if (proc_table[INTDRIVE_task].status == INTDRIVE_WAIT) { |
212,10 → 207,9 |
|
if (lev->replenish_timer == NIL) { |
|
kern_gettime(&time); |
ADDUSEC2TIMESPEC(lev->next_time,&time); |
|
lev->replenish_timer = kern_event_post(&time,INTDRIVE_timer,(void *)lev); |
kern_gettime(&(lev->replenish_expires)); |
ADDUSEC2TIMESPEC(lev->replenish_period,&(lev->replenish_expires)); |
lev->replenish_timer = kern_event_post(&(lev->replenish_expires),INTDRIVE_timer,(void *)lev); |
|
} |
|
237,15 → 231,14 |
{ |
INTDRIVE_level_des *lev = (INTDRIVE_level_des *)(level_table[l]); |
struct timespec time; |
int temp; |
int temp,delta_time;; |
|
if (lev->wcet_timer != NIL) |
kern_event_delete(lev->wcet_timer); |
|
SUBTIMESPEC(&schedule_time, &(lev->act_time), &time); |
temp = TIMESPEC2USEC(&time); |
lev->avail -= TIMESPEC2USEC(&time); |
|
lev->avail -= temp; |
#ifdef INTDRIVE_DEBUG |
kern_printf("(INTD:AV:%d)",(int)(lev->avail)); |
#endif |
252,18 → 245,16 |
|
if (lev->avail < 0) { |
proc_table[INTDRIVE_task].status = INTDRIVE_IDLE; |
temp = lev->capacity - lev->avail; |
mul32div32to32(temp,lev->replenish_period,lev->capacity,lev->next_time); |
temp = -lev->avail; |
mul32div32to32(temp,lev->replenish_period,lev->capacity,delta_time); |
|
if (lev->replenish_timer != NIL) |
kern_event_delete(lev->replenish_timer); |
|
kern_gettime(&time); |
ADDUSEC2TIMESPEC(lev->next_time,&time); |
lev->replenish_timer = kern_event_post(&time,INTDRIVE_timer,(void *)lev); |
ADDUSEC2TIMESPEC(delta_time,&(lev->replenish_expires)); lev->replenish_timer = kern_event_post(&(lev->replenish_expires),INTDRIVE_timer,(void *)lev); |
|
#ifdef INTDRIVE_DEBUG |
kern_printf("(INTD:IDLE)"); |
kern_printf("(INTD:IDLE:%d)",delta_time); |
#endif |
|
} else { |
335,7 → 326,6 |
|
lev->capacity = capacity; |
lev->replenish_period = replenish_period; |
lev->next_time = replenish_period; |
lev->replenish_timer = NIL; |
lev->wcet_timer = NIL; |
lev->flags = flags; |