Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 1562 → Rev 1563

/demos/trunk/sharkDecoderWithFSF/decoder.c
98,20 → 98,30
hard_task_def_wcet(ht,18000);
nrt_task_def_group(ht,3);
 
/*
err = pthread_create(&j, NULL, displayTask, NULL);
if (err) {
grx_close();
grx_text("failed to create displayTask",0,0,rgb16(255,255,255),0);
exit(err);
}
err=fsf_bind_local_thread_to_server(server, j,(fsf_sched_params_t *)(&pr));
if (err) {
grx_close();
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);
grx_text("failed to create displayTask",0,0,rgb16(255,255,255),0);
exit(err);
}
task_activate(j);
 
err=fsf_bind_local_thread_to_server(server, j,(fsf_sched_params_t *)(&pr));
if (err) {
grx_close();
exit(err);
}
}
 
/*********************************************************************'
135,20 → 145,30
nrt_task_default_model(ht);
nrt_task_def_group(ht,1);
 
/*
err = pthread_create(&j, NULL, readTask, NULL);
if (err) {
grx_close();
perror("Could not create task...");
exit(err);
grx_close();
perror("Could not create task...");
exit(err);
}
 
err=fsf_bind_local_thread_to_server(server, j,(fsf_sched_params_t *)(&pr));
if (err) {
err=fsf_bind_local_thread_to_server(server, j,(fsf_sched_params_t *)(&pr));
if (err) {
grx_close();
//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,21 → 194,30
nrt_task_default_model(ht);
nrt_task_def_group(ht,1);
 
err = pthread_create(&j, NULL, mpeg2decoder, NULL);
if (err) {
/*
err = pthread_create(&j, NULL, mpeg2decoder, NULL);
if (err) {
grx_close();
perror("Could not create task...");
exit(err);
}
 
err=fsf_bind_local_thread_to_server(server, j,(fsf_sched_params_t *)(&pr));
}
err=fsf_bind_local_thread_to_server(server, j,(fsf_sched_params_t *)(&pr));
if (err) {
grx_close();
//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();
//perror("Could not bind task..");
exit(err);
grx_text("failed to create displayTask",0,0,rgb16(255,255,255),0);
exit(err);
}
task_activate(j);
}
}
 
 
/***************************************************************************
228,7 → 257,7
//perror("Could not bind task..");
exit(err);
}
 
return 1;
}
void ending_system(KEY_EVT *e) {
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)
324,7 → 398,7
}
if((decoderTaskPort->displayTaskPort = port_create(displayPortName, sizeof(struct decodeDisplayMessage), NUMBER_OF_MESSAGE, STREAM, WRITE)) == -1)
{
grx_text("failed to create displayTask Port",0,0,rgb16(255,255,255),0);
grx_text("failed to create displayTask Port",0,0,rgb16(255,255,255),0);
exit(-1);
}
if((decoderTaskPort->readTaskPort = port_connect(readFilePortName, sizeof(struct readDecodeMessage), STREAM, READ)) == -1)
335,11 → 409,11
if((displayTaskPort = port_connect(displayPortName, sizeof(struct decodeDisplayMessage), STREAM, READ)) == -1)
{
grx_text("failed to connect to displayTask Port",0,0,rgb16(255,255,255),0);
exit(-1);
exit(-1);
}
 
//graphic card Initialization
if (grx_init() < 1) {
if (grx_init() < 1) {
exit(-1);
}
 
346,10 → 420,12
if (grx_open(800, 600, 16) < 0) {
cprintf("GRX Err\n");
exit(-1);
}
 
 
ch = keyb_getch(BLOCK);
}
kern_gettime(&simtime);
simtime.tv_sec+=20;
kern_event_post(&simtime,(void *)((void *)(ending_system)), NULL);
/*ch = keyb_getch(BLOCK);
while(ch != ESC) {
 
356,10 → 432,11
switch (ch)
{
 
case '1':
case '1': */
addReadTaskToServer(readTaskServer);
addDecoderThreadToServer(decoderServer);
addDisplayTaskToServer(displayServer);
/*
break;
case '2':
sprintf(tmp,"Number of dummy task: %d", i);
375,8 → 452,9
ch = keyb_getch(BLOCK);
}
 
ending_system(NULL);
*/
//ending_system(NULL);
while(1);
return 0;