98,7 → 98,7 |
hard_task_def_wcet(ht,18000); |
nrt_task_def_group(ht,3); |
|
|
/* |
err = pthread_create(&j, NULL, displayTask, NULL); |
if (err) { |
grx_close(); |
112,8 → 112,18 |
exit(err); |
|
} |
*/ |
err = fsf_create_local_thread(server,(fsf_sched_params_t *)(&pr), &j,NULL, |
displayTask,NULL); |
if (err) { |
grx_close(); |
grx_text("failed to create displayTask",0,0,rgb16(255,255,255),0); |
exit(err); |
} |
task_activate(j); |
|
} |
|
/*********************************************************************' |
* |
* Create the input task and bind it to a server |
135,7 → 145,7 |
nrt_task_default_model(ht); |
nrt_task_def_group(ht,1); |
|
|
/* |
err = pthread_create(&j, NULL, readTask, NULL); |
if (err) { |
grx_close(); |
149,7 → 159,17 |
//perror("Could not bind task.."); |
exit(err); |
} |
*/ |
|
err = fsf_create_local_thread(server,(fsf_sched_params_t *)(&pr), &j,NULL, |
readTask,NULL); |
if (err) { |
grx_close(); |
grx_text("failed to create displayTask",0,0,rgb16(255,255,255),0); |
exit(err); |
} |
task_activate(j); |
} |
|
/********************************************************************** |
* |
174,7 → 194,7 |
nrt_task_default_model(ht); |
nrt_task_def_group(ht,1); |
|
|
/* |
err = pthread_create(&j, NULL, mpeg2decoder, NULL); |
if (err) { |
grx_close(); |
188,7 → 208,16 |
//perror("Could not bind task.."); |
exit(err); |
} |
*/ |
err = fsf_create_local_thread(server,(fsf_sched_params_t *)(&pr), &j,NULL, |
mpeg2decoder,NULL); |
if (err) { |
grx_close(); |
grx_text("failed to create displayTask",0,0,rgb16(255,255,255),0); |
exit(err); |
} |
task_activate(j); |
} |
|
|
/*************************************************************************** |
246,24 → 275,28 |
int err; |
int i = 1; |
char tmp[100]; |
struct timespec simtime; |
//KEY_EVT k; |
union sigval no_sigval = {0}; |
|
PI_mutexattr_t a; |
KEY_EVT ev; |
|
|
/* 10% */ |
struct timespec decoderPeriod = {0,30000000}; |
struct timespec decoderBudget = {0,3000000}; |
|
/* 10% */ |
struct timespec readTaskPeriod = {0,30000000}; |
struct timespec readTaskBudget = {0,3000000}; |
|
/* 45% */ |
struct timespec displayPeriod = {0,40000000}; |
struct timespec displayBudget = {0,18000000}; |
|
// 30 % |
// 5 % |
struct timespec overloadPeriod = {0,10000000}; |
struct timespec overloadBudget = {0,3000000}; |
struct timespec overloadBudget = {0,500000}; |
|
fsf_server_id_t decoderServer; |
fsf_server_id_t readTaskServer; |
278,42 → 311,83 |
union sigval sval; |
|
|
ev.ascii = 'c'; |
ev.scan = KEY_C; |
ev.status = KEY_PRESSED; |
ev.flag = CNTR_BIT; |
keyb_hook(ev, ending_system, FALSE); |
//ev.ascii = 'c'; |
//ev.scan = KEY_C; |
//ev.status = KEY_PRESSED; |
//ev.flag = CNTR_BIT; |
//keyb_hook(ev, ending_system, FALSE); |
|
PI_mutexattr_default(a); |
FSF_start_service_task(); |
fsf_init(); |
|
mutex_init(&mux,&a); |
|
// Set up the different servers |
fsf_initialize_contract(&readTaskContract); |
fsf_set_contract_basic_parameters(&readTaskContract,&readTaskBudget,&readTaskPeriod,FSF_DEFAULT_WORKLOAD); |
err=fsf_set_contract_basic_parameters(&readTaskContract,&readTaskBudget,&readTaskPeriod,FSF_DEFAULT_WORKLOAD); |
if (err) { |
exit(err); |
} |
err=fsf_set_contract_reclamation_parameters(&readTaskContract,&readTaskBudget,&readTaskPeriod,FSF_DEFAULT_GRANULARITY, NULL, 1,1); |
if (err) exit(err); |
err=fsf_set_contract_timing_requirements(&readTaskContract,true,NULL,0,no_sigval,0,no_sigval); |
if (err) exit(err); |
|
fsf_set_contract_scheduling_policy(&readTaskContract, FSF_RR); |
|
fsf_initialize_contract(&decoderContract); |
fsf_set_contract_basic_parameters(&decoderContract,&decoderBudget,&decoderPeriod,FSF_DEFAULT_WORKLOAD); |
err=fsf_set_contract_basic_parameters(&decoderContract,&decoderBudget,&decoderPeriod,FSF_DEFAULT_WORKLOAD); |
if (err) { |
grx_close(); |
exit(err); |
} |
|
err=fsf_set_contract_reclamation_parameters(&decoderContract,&decoderBudget,&decoderPeriod,FSF_DEFAULT_GRANULARITY, NULL, 1,1); |
if (err) exit(err); |
err=fsf_set_contract_timing_requirements(&decoderContract,true,NULL,0,no_sigval,0,no_sigval); |
if (err) exit(err); |
|
fsf_set_contract_scheduling_policy(&decoderContract, FSF_RR); |
|
fsf_initialize_contract(&displayContract); |
fsf_set_contract_basic_parameters(&displayContract,&displayBudget,&displayPeriod,FSF_DEFAULT_WORKLOAD); |
err=fsf_set_contract_basic_parameters(&displayContract,&displayBudget,&displayPeriod,FSF_DEFAULT_WORKLOAD); |
if (err) { |
exit(err); |
} |
|
err=fsf_set_contract_reclamation_parameters(&displayContract,&displayBudget,&displayPeriod,FSF_DEFAULT_GRANULARITY, NULL, 1,1); |
if (err) exit(err); |
err=fsf_set_contract_timing_requirements(&displayContract,true,NULL,0,no_sigval,0,no_sigval); |
if (err) exit(err); |
|
fsf_set_contract_scheduling_policy(&displayContract, FSF_EDF); |
|
fsf_initialize_contract(&overloadContract); |
fsf_set_contract_basic_parameters(&overloadContract,&overloadBudget,&overloadPeriod,FSF_DEFAULT_WORKLOAD); |
err=fsf_set_contract_basic_parameters(&overloadContract,&overloadBudget,&overloadPeriod,FSF_DEFAULT_WORKLOAD); |
if (err) { |
exit(err); |
} |
|
fsf_set_contract_scheduling_policy(&overloadContract, FSF_EDF); |
|
err = fsf_negotiate_contract(&readTaskContract,&readTaskServer); |
if (err) cprintf("(FSF ERROR %d)",err); |
if (err) { |
exit(err); |
} |
|
err = fsf_negotiate_contract(&decoderContract,&decoderServer); |
if (err) cprintf("(FSF ERROR %d)",err); |
if (err) { |
exit(err); |
} |
err = fsf_negotiate_contract(&displayContract,&displayServer); |
if (err) cprintf("(FSF ERROR %d)",err); |
if (err) { |
exit(err); |
} |
|
err = fsf_negotiate_contract(&overloadContract,&overloadServer); |
if (err) cprintf("(FSF ERROR %d)",err); |
if (err) { |
exit(err); |
} |
|
|
// Create and bind different ports to communication links (This ports a declared in global.h) |
348,18 → 422,21 |
exit(-1); |
} |
|
kern_gettime(&simtime); |
simtime.tv_sec+=20; |
kern_event_post(&simtime,(void *)((void *)(ending_system)), NULL); |
/*ch = keyb_getch(BLOCK); |
|
ch = keyb_getch(BLOCK); |
|
while(ch != ESC) { |
|
switch (ch) |
{ |
|
case '1': |
case '1': */ |
addReadTaskToServer(readTaskServer); |
addDecoderThreadToServer(decoderServer); |
addDisplayTaskToServer(displayServer); |
/* |
break; |
case '2': |
sprintf(tmp,"Number of dummy task: %d", i); |
375,9 → 452,10 |
ch = keyb_getch(BLOCK); |
|
} |
*/ |
//ending_system(NULL); |
while(1); |
|
ending_system(NULL); |
|
return 0; |
|
} |