Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 1201 → Rev 1202

/demos/trunk/loader/parser.h
30,6 → 30,7
 
struct loader_task {
int number;
int group;
int task_level;
int task_type;
struct timespec wcet;
/demos/trunk/loader/loader.c
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(&current->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(&current->act_par_2));
101,8 → 117,8
soft_task_def_met(st,TIMESPEC2USEC(&current->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(&current->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,&current->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;