8 #include <native/task.h>
9 #include <native/timer.h>
10 #include <native/sem.h>
17 #define HIGH 52 /* high priority */
18 #define MID 51 /* medium priority */
19 #define LOW 50 /* low priority */
21 RT_TASK demo_task
[NTASKS
];
24 #define BASEPERIOD 0 // baseperiod 0 to get ns
26 #define EXECTIME 2e8 // execution time in ns
27 #define SPINTIME 1e7 // spin time in ns
31 RTIME starttime
, runtime
;
34 RT_TASK_INFO curtaskinfo
;
36 curtask
=rt_task_self();
37 rt_printf("Task : %d\n",num
);
39 rt_sem_p(&mysync
,TM_INFINITE
);
42 while(runtime
< EXECTIME
) {
43 rt_timer_spin(SPINTIME
); // spin cpu doing nothing
45 runtime
= runtime
+ SPINTIME
;
47 rt_printf("Running Task : %d at ms : %d\n",num
,runtime
/1000000);
48 if(runtime
== (EXECTIME
/2)){
50 rt_task_set_priority(&demo_task
[0],40);
53 rt_task_set_priority(&demo_task
[1],39);
56 rt_task_set_priority(&demo_task
[2],38);
60 rt_printf("End Task : %d\n",num
);
69 // semaphore to sync task startup on
70 rt_sem_create(&mysync
,"MySemaphore",0,S_FIFO
);
73 rt_timer_set_mode(BASEPERIOD
);
75 for(i
=0; i
< NTASKS
; i
++) {
76 rt_printf("start task : %d\n",i
);
77 sprintf(str
,"task%d",i
);
78 rt_task_create(&demo_task
[i
], str
, 0, 50, 0);
79 rt_task_start(&demo_task
[i
], &demo
, &i
);
81 // assign priorities to tasks
82 // (or in creation use 50+i)
83 rt_task_set_priority(&demo_task
[0],LOW
);
84 rt_task_set_priority(&demo_task
[1],MID
);
85 rt_task_set_priority(&demo_task
[2],HIGH
);
87 rt_printf("wake up all tasks\n");
88 rt_sem_broadcast(&mysync
);
92 /* Avoids memory swapping for this program */
93 mlockall(MCL_CURRENT
|MCL_FUTURE
);
95 /* Perform auto-init of rt_print buffers if the task doesn't do so */
96 rt_print_auto_init(1);
99 int main(int argc
, char* argv
[])
101 printf("\nType CTRL-C to end this program\n\n" );
103 // code to set things to run xenomai
109 // wait for CTRL-c is typed to end the program