OK, I understand that it is rt_task_slice that must be used.
The problem is that i dont see any RR effect during execution.
The code is simple and inspired by this no more suitable but useful code
: http://www.cs.ru.nl/lab/xenomai/exercises/ex06/ex06a.c .
4 non periodic tasks are set. They are calling rt_timer_spin(SPINTIME)
to do nothing during EXECTIME.
1. They are set with priority 60.
2. Then the RR quantum is set to 3*SPINTIME.
I would like to see the task 0 preempted but it is not. It looks like
FIFO scheduling without RR.
Here below is the code and the output follows :
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
#include<sys/mman.h>
#include<native/task.h>
#include<native/timer.h>
#include<native/sem.h>
#include<rtdk.h>
#include<sys/io.h>
#define NTASKS 4
RT_TASK demo_task[NTASKS];
RT_SEM mysync;
#define EXECTIME 2e7 // execution time in ns ==> 20 ms
#define SPINTIME 1e6 // spin time in ns ==> 1 ms
void demo(void *arg)
{
RTIME runtime;
runtime = 0;
rt_sem_p(&mysync,TM_INFINITE);
// inquire current task
RT_TASK *curtask;
RT_TASK_INFO curtaskinfo;
curtask=NULL;
rt_task_inquire(curtask,&curtaskinfo);
while(curtaskinfo.exectime< EXECTIME) {
rt_timer_spin(SPINTIME); // spin cpu doing nothing
rt_task_inquire(curtask,&curtaskinfo);
rt_printf("Running %s priority[%d] at : %d
ms\n",curtaskinfo.name,curtaskinfo.cprio,curtaskinfo.exectime/1000000);
}
rt_printf("End of %s\n",curtaskinfo.name);
}
//startup code
void startup()
{
int i;
char str[10] ;
RT_TASK_INFO ataskinfo;
// semaphore to sync task startup on
rt_sem_create(&mysync,"MySemaphore",0,S_FIFO);
// starting tasks
for(i=0;i<NTASKS;i++) {
sprintf(str,"Task%d",i);
int priority=60;
rt_task_create(&demo_task[i], str, 0, priority, 0);
rt_task_start(&demo_task[i],&demo, NULL);
rt_task_inquire(&demo_task[i],&ataskinfo);
rt_printf("Starting task : %s with priority
%d\n",ataskinfo.name,ataskinfo.cprio);
}
// set RR
for(i=0;i<NTASKS;i++) {
RTIME quantum=rt_timer_ns2tsc(3*SPINTIME);
int err=rt_task_slice(&demo_task[i],quantum);
rt_printf("error set quantum ? %d\n",err);
rt_task_inquire(&demo_task[i],&ataskinfo);
rt_printf("Setting round robin policy to %s with quantum
%i\n",ataskinfo.name,quantum);
}
rt_printf("wake up all tasks\n");
rt_sem_broadcast(&mysync);
}
void init_xenomai() {
/* Avoids memory swapping for this program */
mlockall(MCL_CURRENT|MCL_FUTURE);
/* Perform auto-init of rt_print buffers if the task doesn't do so */
rt_print_auto_init(1);
}
int main(int argc, char* argv[])
{
printf("\nType CTRL-C to end this program\n\n" );
// code to set things to run xenomai
init_xenomai();
//startup code
startup();
pause();
int i;
for (i=0;i<NTASKS;i++)
rt_task_join(&demo_task[i]);
return 0;
}
And the ouput :
# ./xeno_sched
Type CTRL-C to end this program
Starting task : Task0 with priority 60
Starting task : Task1 with priority 60
Starting task : Task2 with priority 60
Starting task : Task3 with priority 60
error set quantum ? 0
Setting round robin policy to Task0 with quantum 9875004
error set quantum ? 0
Setting round robin policy to Task1 with quantum 9875004
error set quantum ? 0
Setting round robin policy to Task2 with quantum 9875004
error set quantum ? 0
Setting round robin policy to Task3 with quantum 9875004
wake up all tasks
Running Task0 priority[60] at : 1 ms
Running Task0 priority[60] at : 2 ms
Running Task0 priority[60] at : 3 ms
Running Task0 priority[60] at : 4 ms
Running Task0 priority[60] at : 5 ms
Running Task0 priority[60] at : 6 ms
Running Task0 priority[60] at : 7 ms
Running Task0 priority[60] at : 8 ms
Running Task0 priority[60] at : 9 ms
Running Task0 priority[60] at : 10 ms
Running Task0 priority[60] at : 11 ms
Running Task0 priority[60] at : 12 ms
Running Task0 priority[60] at : 13 ms
Running Task0 priority[60] at : 14 ms
Running Task0 priority[60] at : 15 ms
Running Task0 priority[60] at : 16 ms
Running Task0 priority[60] at : 17 ms
Running Task0 priority[60] at : 18 ms
Running Task0 priority[60] at : 19 ms
Running Task0 priority[60] at : 20 ms
End of Task0
Running Task1 priority[60] at : 1 ms
Running Task1 priority[60] at : 2 ms
Running Task1 priority[60] at : 3 ms
Running Task1 priority[60] at : 4 ms
Running Task1 priority[60] at : 5 ms
Running Task1 priority[60] at : 6 ms
Running Task1 priority[60] at : 7 ms
Running Task1 priority[60] at : 8 ms
Running Task1 priority[60] at : 9 ms
Running Task1 priority[60] at : 10 ms
Running Task1 priority[60] at : 11 ms
Running Task1 priority[60] at : 12 ms
Running Task1 priority[60] at : 13 ms
Running Task1 priority[60] at : 14 ms
Running Task1 priority[60] at : 15 ms
Running Task1 priority[60] at : 16 ms
Running Task1 priority[60] at : 17 ms
Running Task1 priority[60] at : 18 ms
Running Task1 priority[60] at : 19 ms
Running Task1 priority[60] at : 20 ms
End of Task1
Running Task2 priority[60] at : 1 ms
Running Task2 priority[60] at : 2 ms
Running Task2 priority[60] at : 3 ms
Running Task2 priority[60] at : 4 ms
Running Task2 priority[60] at : 5 ms
Running Task2 priority[60] at : 6 ms
Running Task2 priority[60] at : 7 ms
Running Task2 priority[60] at : 8 ms
Running Task2 priority[60] at : 9 ms
Running Task2 priority[60] at : 10 ms
Running Task2 priority[60] at : 11 ms
Running Task2 priority[60] at : 12 ms
Running Task2 priority[60] at : 13 ms
Running Task2 priority[60] at : 14 ms
Running Task2 priority[60] at : 15 ms
Running Task2 priority[60] at : 16 ms
Running Task2 priority[60] at : 17 ms
Running Task2 priority[60] at : 18 ms
Running Task2 priority[60] at : 19 ms
Running Task2 priority[60] at : 20 ms
End of Task2
Running Task3 priority[60] at : 1 ms
Running Task3 priority[60] at : 2 ms
Running Task3 priority[60] at : 3 ms
Running Task3 priority[60] at : 4 ms
Running Task3 priority[60] at : 5 ms
Running Task3 priority[60] at : 6 ms
Running Task3 priority[60] at : 7 ms
Running Task3 priority[60] at : 8 ms
Running Task3 priority[60] at : 9 ms
Running Task3 priority[60] at : 10 ms
Running Task3 priority[60] at : 11 ms
Running Task3 priority[60] at : 12 ms
Running Task3 priority[60] at : 13 ms
Running Task3 priority[60] at : 14 ms
Running Task3 priority[60] at : 15 ms
Running Task3 priority[60] at : 16 ms
Running Task3 priority[60] at : 17 ms
Running Task3 priority[60] at : 18 ms
Running Task3 priority[60] at : 19 ms
Running Task3 priority[60] at : 20 ms
End of Task3
Le 09/11/2011 01:12, Gilles Chanteperdrix a écrit :
See also ksrc/skins/native/API.CHANGES in xeny omai sources.
_______________________________________________
Xenomai-help mailing list
Xenomai-help@gna.org
https://mail.gna.org/listinfo/xenomai-help