Clarification on Rate montonic
domenico.dileo at unina.it
domenico.dileo at unina.it
Mon Jun 4 21:29:43 UTC 2012
Hello,
With the code hereafter, I run two periodic tasks (PER0 and PER1)
and scheduled them with the rate monotonic.
Also, a log of the excution follows the code.
PER0 has period 6000 ticks, while PER1 215.
Questions:
a) Since PER0 's pariod >> PER1's period should be PER1
the first to be scheduled?
According to the log, PER0 is the first one
b) how should I modify the code in order to have
PER1 scheduled before PER0?
Of course if I swap periodic_task(task_id[0], 6000);
with periodic_task(task_id[0], 215) I can observer
PER1 scheuled before PER0.
It seems that the first task to be scheduled
is the first to execute (with the call to the function
rtems_rata_monotonic_period).
Thank you in advance,
****************************************************
init.c code
****************************************************
...
int i = 0;
int l = 1;
for(i; i< 3; i++){
task_names[ i ] = rtems_build_name( 'P', 'R', '0'+i , ' ' );
status = rtems_rate_monotonic_create(task_names[i], &task_id[i]);
if(status == RTEMS_SUCCESSFUL){
printf("Task %s created with id %d \n",
rtems_object_get_name(task_id[i],sizeof(task_names[i]),task_name),
task_id[i]);
}else{
printf("Failed to create task %s with status %i \n",
rtems_object_get_name(task_id[i],NAME_LENGTH,task_name), status);
}
}
//rtems_rate_monotonic_reset_all_statistics();
//for(i = 0; i < 3; i++)
periodic_task(task_id[0], 6000);
periodic_task(task_id[1], 215);
//wake up init after 5 seconds
status = rtems_task_wake_after(ticks_per_second*10);
// delete init task after starting the three working tasks
rtems_rate_monotonic_report_statistics();
int j = 0;
for(j; j<=3;j++){
rtems_rate_monotonic_delete(task_id[j]);
}
status = rtems_task_delete( RTEMS_SELF );
rtems_shutdown_executive(result);
}
**********************************************
tasks.c
**********************************************
rtems_task periodic_task(
rtems_id task_id,
rtems_interval period
)
{
rtems_time_of_day time;
rtems_status_code status;
rtems_interval interval;
uint32_t ticks_since_boot;
uint32_t count;
char task_name[NAME_LENGTH];
count = 0;
//task_id = rtems_task_self();
while( count < 10 ) {
count++;
status = rtems_clock_get_tod( &time );
if(status != RTEMS_SUCCESSFUL){
printf("\n FAILED TO GET TIME OF THE DAY \n");
}
printf("\n\n %s - is running \n",
rtems_object_get_name(task_id,NAME_LENGTH,task_name));
print_time( " - current time - ", &time, "\n" );
ticks_since_boot = rtems_clock_get_ticks_since_boot();
printf(" - Ticks since boot: %" PRIu32 "\n", ticks_since_boot);
status = rtems_rate_monotonic_period(task_id,period);
if(status == RTEMS_TIMEOUT){
rtems_rate_monotonic_delete(task_id);
}
}
}
****************************************************************
LOG
****************************************************************
Task PR0 created with id 1107361793
Task PR1 created with id 1107361794
Task PR2 created with id 1107361795
PR0 - is running
- current time - 00:00:00 05/05/2012
- Ticks since boot: 0
PR0 - is running
- current time - 00:00:00 05/05/2012
- Ticks since boot: 0
PR0 - is running
- current time - 00:00:03 05/05/2012
- Ticks since boot: 6076
PR0 - is running
- current time - 00:00:06 05/05/2012
- Ticks since boot: 12055
PR0 - is running
- current time - 00:00:09 05/05/2012
- Ticks since boot: 18087
PR0 - is running
- current time - 00:00:12 05/05/2012
- Ticks since boot: 24068
PR0 - is running
- current time - 00:00:15 05/05/2012
- Ticks since boot: 30099
PR0 - is running
- current time - 00:00:18 05/05/2012
- Ticks since boot: 36098
PR0 - is running
- current time - 00:00:21 05/05/2012
- Ticks since boot: 42071
PR0 - is running
- current time - 00:00:24 05/05/2012
- Ticks since boot: 48072
PR1 - is running
- current time - 00:00:27 05/05/2012
- Ticks since boot: 54096
PR1 - is running
- current time - 00:00:27 05/05/2012
- Ticks since boot: 54200
PR1 - is running
- current time - 00:00:27 05/05/2012
- Ticks since boot: 54423
PR1 - is running
- current time - 00:00:27 05/05/2012
- Ticks since boot: 54655
PR1 - is running
- current time - 00:00:27 05/05/2012
- Ticks since boot: 54840
PR1 - is running
- current time - 00:00:27 05/05/2012
- Ticks since boot: 55104
PR1 - is running
- current time - 00:00:27 05/05/2012
- Ticks since boot: 55271
PR1 - is running
- current time - 00:00:27 05/05/2012
- Ticks since boot: 55526
PR1 - is running
- current time - 00:00:27 05/05/2012
- Ticks since boot: 55712
PR1 - is running
- current time - 00:00:27 05/05/2012
- Ticks since boot: 55937
Period information by period
--- CPU times are in seconds ---
--- Wall times are in seconds ---
ID OWNER COUNT MISSED CPU TIME WALL TIME
MIN/MAX/AVG MIN/MAX/AVG
0x42010001 UI1 9 0 0.000000/0.065991/0.047860
0.000000/0.066002/0.047885
0x42010002 UI1 9 0 0.044008/0.078422/0.058316
0.044010/0.078501/0.058371
0x42010003 UI1 0 0
More information about the users
mailing list