45,8 → 45,6 |
|
#include <tracer.h> |
|
#define EDFSTAR_CHANGE_LEVEL 1 |
|
/* for iqueues */ |
/* #include "iqueue.h" Now iqueues are the only queue type available |
into the kernel */ |
87,6 → 85,7 |
#define EDFSTAR_IDLE MODULE_STATUS_BASE+4 /* to wait the deadline */ |
|
/* flags */ |
#define EDFSTAR_CHANGE_LEVEL 8 |
#define EDFSTAR_FLAG_NOPREEMPT 4 |
#define EDFSTAR_FLAG_NORAISEEXC 2 |
#define EDFSTAR_FLAG_SPORADIC 1 |
236,9 → 235,14 |
/* Change task level */ |
if (lev->flag[p] & EDFSTAR_CHANGE_LEVEL) { |
|
#ifdef EDFSTAR_DEBUG |
edfstar_printf("(E:clev)"); |
#endif |
|
STD_command_message msg; |
|
proc_table[p].status = SLEEP; |
lev->flag[p] &= ~ EDFSTAR_CHANGE_LEVEL; |
|
level_table[lev->scheduling_level]->private_extract(lev->scheduling_level,p); |
iq_extract(p,&lev->ready); |
333,7 → 337,7 |
EDFSTAR_level_des *lev = (EDFSTAR_level_des *)(level_table[l]); |
|
#ifdef EDFSTAR_DEBUG |
edfstar_printf2("(E:eli)"); |
edfstar_printf2("(E:eli:%d)",p); |
#endif |
|
return level_table[ lev->scheduling_level ]-> |
579,11 → 583,14 |
/* if the EDFSTAR_task_create is called, then the pclass must be a |
valid pclass. */ |
h=(HARD_TASK_MODEL *)(msg->param); |
|
|
/* now we know that m is a valid model */ |
lev->wcet[p] = h->wcet; |
lev->period[p] = h->mit; |
|
|
#ifdef EDFSTAR_DEBUG |
kern_printf("(EDF:NM p%d w%d m%d)", p, h->wcet, h->mit); |
#endif |
lev->flag[p] = 0; |
lev->deadline_timer[p] = -1; |
lev->dline_miss[p] = 0; |
600,7 → 607,9 |
break; |
|
case STD_ACTIVATE_TASK: |
|
#ifdef EDFSTAR_DEBUG |
kern_printf("(EDF:SA)"); |
#endif |
/* Enable wcet check */ |
proc_table[p].avail_time = lev->wcet[p]; |
proc_table[p].wcet = lev->wcet[p]; |
716,7 → 725,7 |
EDFSTAR_level_des *lev = (EDFSTAR_level_des *)(level_table[l]); |
|
#ifdef EDFSTAR_DEBUG |
//kern_printf("EDFSTAR_guest_end: dline timer %d\n",lev->deadline_timer[p]); |
kern_printf("EDFSTAR_guest_end: dline timer %d\n",lev->deadline_timer[p]); |
#endif |
|
iq_extract(p, &lev->ready); |
724,7 → 733,7 |
/* we remove the deadline timer, because the slice is finished */ |
if (lev->deadline_timer[p] != NIL) { |
#ifdef EDFSTAR_DEBUG |
// kern_printf("EDFSTAR_guest_end: dline timer %d\n",lev->deadline_timer[p]); |
kern_printf("EDFSTAR_guest_end: dline timer %d\n",lev->deadline_timer[p]); |
#endif |
kern_event_delete(lev->deadline_timer[p]); |
lev->deadline_timer[p] = NIL; |