started with lego stuff
[des2015.git] / mart / xenomai / ex03 / ex03c2.c
1 #include <stdio.h>
2 #include <signal.h>
3 #include <unistd.h>
4 #include <sys/mman.h>
5
6 #include <native/task.h>
7 #include <native/timer.h>
8 #include <native/sem.h>
9
10 #include <rtdk.h>
11 RT_TASK demo_task;
12 RT_SEM semGlobal;
13
14 void demo(void *arg)
15 {
16 RT_TASK *curtask;
17 RT_TASK_INFO curtaskinfo;
18
19 // inquire current task
20 curtask=rt_task_self();
21 rt_task_inquire(curtask,&curtaskinfo);
22
23 rt_sem_p(&semGlobal,TM_INFINITE);
24
25 // print task name
26 int num = * (int *)arg;
27 rt_printf("Task name : %s \n", curtaskinfo.name);
28 }
29
30 int main(int argc, char* argv[])
31 {
32 char str[10] ;
33 int i;
34
35 // Perform auto-init of rt_print buffers if the task doesn't do so
36 rt_print_auto_init(1);
37
38 // Lock memory : avoid memory swapping for this program
39 mlockall(MCL_CURRENT|MCL_FUTURE);
40
41 /* create semaphore */
42 rt_sem_create(&semGlobal,"semaphore",0,S_PRIO);
43
44 rt_printf("start task\n");
45
46 for (i=0; i<5; i++)
47 {
48 /*
49 * Arguments: &task,
50 * name,
51 * stack size (0=default),
52 * priority,
53 * mode (FPU, start suspended, ...)
54 */
55 sprintf(str,"hello-%d",i);
56 rt_task_create(&demo_task, str, 0, 50+i, 0);
57
58 /*
59 * Arguments: &task,
60 * task function,
61 * function argument
62 */
63 rt_task_start(&demo_task, &demo, &i);
64 }
65
66 rt_sem_broadcast(&semGlobal);
67
68 }