5,11 → 5,18 |
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; |
18,9 → 25,14 |
|
TASK test_task(void *arg) |
{ |
int i; |
|
cprintf("(Act %d)",exec_shadow); |
|
while(1) { |
|
for (i=0;i<100000;i++); |
|
task_endcycle(); |
|
} |
34,6 → 46,7 |
|
struct loader_task *current = start_loader_task; |
int i, total_task; |
int total_group = 0; |
PID p; |
|
total_task = 0; |
40,6 → 53,9 |
|
while (current != NULL) { |
|
total_group++; |
current->group = total_group; |
|
for (i=0; i < current->number; i++) { |
|
if (current->task_type == PAR_TASK_NRT) { |
50,7 → 66,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,1); |
nrt_task_def_group(nrt,total_group); |
|
p = task_create("NRT",nrt_test_task,&nrt,NULL); |
if (p == NIL) { |
70,7 → 86,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,1); |
hard_task_def_group(ht,total_group); |
|
if (current->act_type == PAR_ACT_PERIODIC) { |
hard_task_def_mit(ht,TIMESPEC2USEC(¤t->act_par_2)); |
101,8 → 117,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,1); |
|
soft_task_def_group(st,total_group); |
|
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) { |
133,12 → 149,29 |
|
} |
|
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); |
146,8 → 179,10 |
loader_task_create(start_loader_task); |
|
kern_gettime(&zero_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; |