5,14 → 5,151 |
extern void *start; |
extern void *end; |
|
TASK nrt_test_task(void *arg) |
{ |
|
while(1) { |
|
} |
|
return NULL; |
|
} |
|
TASK test_task(void *arg) |
{ |
|
while(1) { |
|
task_endcycle(); |
|
} |
|
return NULL; |
|
} |
|
void loader_task_create(struct loader_task *start_loader_task) |
{ |
|
struct loader_task *current = start_loader_task; |
int i, total_task; |
PID p; |
|
total_task = 0; |
|
while (current != NULL) { |
|
for (i=0; i < current->number; i++) { |
|
if (current->task_type == PAR_TASK_NRT) { |
NRT_TASK_MODEL nrt; |
|
nrt_task_default_model(nrt); |
nrt_task_def_save_arrivals(nrt); |
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,1); |
|
p = task_create("NRT",nrt_test_task,&nrt,NULL); |
if (p == NIL) { |
cprintf("Error nrt task creating\n"); |
sys_end(); |
} |
|
total_task++; |
|
} |
|
if (current->task_type == PAR_TASK_HARD) { |
HARD_TASK_MODEL ht; |
|
hard_task_default_model(ht); |
hard_task_def_arg(ht,(void *)(current)); |
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,1); |
|
if (current->act_type == PAR_ACT_PERIODIC) { |
hard_task_def_mit(ht,TIMESPEC2USEC(¤t->act_par_2)); |
} else if (current->act_type != PAR_ACT_SINGLE) { |
hard_task_def_mit(ht,TIMESPEC2USEC(¤t->act_par_2)); |
hard_task_def_aperiodic(ht); |
} else { |
hard_task_def_mit(ht,TIMESPEC2USEC(¤t->wcet)*100); |
hard_task_def_aperiodic(ht); |
} |
|
p = task_create("HARD",test_task,&ht,NULL); |
if (p == NIL) { |
cprintf("Error hard task creating\n"); |
sys_end(); |
} |
|
total_task++; |
|
} |
|
if (current->task_type == PAR_TASK_SOFT) { |
SOFT_TASK_MODEL st; |
|
soft_task_default_model(st); |
soft_task_def_save_arrivals(st); |
soft_task_def_arg(st,(void *)(current)); |
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,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) { |
soft_task_def_period(st,TIMESPEC2USEC(¤t->act_par_2)); |
soft_task_def_aperiodic(st); |
} else { |
soft_task_def_period(st,TIMESPEC2USEC(¤t->wcet)*100); |
soft_task_def_aperiodic(st); |
} |
|
p = task_create("SOFT",test_task,&st,NULL); |
if (p == NIL) { |
cprintf("Error soft task creating\n"); |
sys_end(); |
} |
|
total_task++; |
|
} |
|
} |
|
current = current->next; |
|
} |
|
cprintf("Created %d tasks\n",total_task); |
|
} |
|
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); |
line_reader(start, end, &total, &start_loader_task); |
|
loader_task_create(start_loader_task); |
|
kern_gettime(&zero_time); |
ADDTIMESPEC(&zero_time,&total,&end_time); |
|
kern_event_post(&end_time,(void *)((void *)(sys_end)),NULL); |
|
return 0; |
|
} |