5,18 → 5,11 |
extern void *start; |
extern void *end; |
|
struct timespec zero_time; |
|
TASK nrt_test_task(void *arg) |
{ |
int i; |
|
cprintf("(Act %d)",exec_shadow); |
|
while(1) { |
|
for (i=0;i<100000;i++); |
|
} |
|
return NULL; |
25,14 → 18,9 |
|
TASK test_task(void *arg) |
{ |
int i; |
|
cprintf("(Act %d)",exec_shadow); |
|
while(1) { |
|
for (i=0;i<100000;i++); |
|
task_endcycle(); |
|
} |
46,7 → 34,6 |
|
struct loader_task *current = start_loader_task; |
int i, total_task; |
int total_group = 0; |
PID p; |
|
total_task = 0; |
53,9 → 40,6 |
|
while (current != NULL) { |
|
total_group++; |
current->group = total_group; |
|
for (i=0; i < current->number; i++) { |
|
if (current->task_type == PAR_TASK_NRT) { |
66,7 → 50,7 |
nrt_task_def_arg(nrt,(void *)(current)); |
nrt_task_def_ctrl_jet(nrt); |
nrt_task_def_level(nrt,current->task_level); |
nrt_task_def_group(nrt,total_group); |
nrt_task_def_group(nrt,1); |
|
p = task_create("NRT",nrt_test_task,&nrt,NULL); |
if (p == NIL) { |
86,7 → 70,7 |
hard_task_def_wcet(ht,TIMESPEC2USEC(¤t->wcet)); |
hard_task_def_ctrl_jet(ht); |
hard_task_def_level(ht,current->task_level); |
hard_task_def_group(ht,total_group); |
hard_task_def_group(ht,1); |
|
if (current->act_type == PAR_ACT_PERIODIC) { |
hard_task_def_mit(ht,TIMESPEC2USEC(¤t->act_par_2)); |
117,8 → 101,8 |
soft_task_def_met(st,TIMESPEC2USEC(¤t->wcet)); |
soft_task_def_ctrl_jet(st); |
soft_task_def_level(st,current->task_level); |
soft_task_def_group(st,total_group); |
|
soft_task_def_group(st,1); |
|
if (current->act_type == PAR_ACT_PERIODIC) { |
soft_task_def_period(st,TIMESPEC2USEC(¤t->act_par_2)); |
} else if (current->act_type != PAR_ACT_SINGLE) { |
149,29 → 133,12 |
|
} |
|
void loader_first_execution(struct loader_task *start_loader_task) |
{ |
|
struct loader_task *current = start_loader_task; |
struct timespec start_time; |
|
while (current != NULL) { |
|
ADDTIMESPEC(&zero_time,¤t->act_par_1,&start_time); |
|
kern_event_post(&start_time, (void *)((void *)group_activate), (void *)(current->group)); |
|
current = current->next; |
|
} |
|
} |
|
int main() |
{ |
|
struct loader_task *start_loader_task = NULL; |
struct timespec total; |
struct timespec zero_time; |
struct timespec end_time; |
|
line_reader(start, end, &total, &start_loader_task); |
179,10 → 146,8 |
loader_task_create(start_loader_task); |
|
kern_gettime(&zero_time); |
ADDTIMESPEC(&zero_time,&total,&end_time); |
|
loader_first_execution(start_loader_task); |
|
ADDTIMESPEC(&zero_time,&total,&end_time); |
kern_event_post(&end_time,(void *)((void *)(sys_end)),NULL); |
|
return 0; |