3efd3f219a7e23fdbe48ecf014165a589edfd02f
[des2015.git] / mart / ex03 / ex03c1.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_sem_p(&semGlobal, 0);
17
18 RT_TASK *curtask;
19 RT_TASK_INFO curtaskinfo;
20
21 // inquire current task
22 curtask=rt_task_self();
23 rt_task_inquire(curtask,&curtaskinfo);
24
25 // print task name
26 int num = * (int *)arg;
27 rt_printf("Task name : %s \n", curtaskinfo.name);
28
29 rt_sem_v(&semGlobal);
30 }
31
32 int main(int argc, char* argv[])
33 {
34 char str[10] ;
35 int i;
36
37 // Perform auto-init of rt_print buffers if the task doesn't do so
38 rt_print_auto_init(1);
39
40 // Lock memory : avoid memory swapping for this program
41 mlockall(MCL_CURRENT|MCL_FUTURE);
42
43 /* create semaphore */
44 rt_sem_create(&semGlobal,"semaphore",0,S_PRIO);
45
46 rt_printf("start task\n");
47
48 for (i=0; i<5; i++)
49 {
50 /*
51 * Arguments: &task,
52 * name,
53 * stack size (0=default),
54 * priority,
55 * mode (FPU, start suspended, ...)
56 */
57 sprintf(str,"hello-%d",i);
58 rt_task_create(&demo_task, str, 0, 50+i, 0);
59
60 /*
61 * Arguments: &task,
62 * task function,
63 * function argument
64 */
65 rt_task_start(&demo_task, &demo, &i);
66 }
67
68 rt_sem_v(&semGlobal);
69 }