Merge branch 'master' of git@github.com:dopefishh/des2015
[des2015.git] / natanael / ex02 / ex02d.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
9 #include <rtdk.h>
10 RT_TASK demo_task;
11
12 void demo(void *arg)
13 {
14 sleep(1);
15 RT_TASK *curtask;
16 RT_TASK_INFO curtaskinfo;
17 // Read system clock
18 RTIME period = 1e9;
19
20 // inquire current task
21 curtask=rt_task_self();
22 rt_task_inquire(curtask,&curtaskinfo);
23
24 // determine the period
25 int num = * (int *)arg;
26 period*=num;
27 rt_task_set_periodic(NULL,TM_NOW,period);
28
29 while(1){
30 // print task name
31 rt_printf("Task name : %s - Period %d \n", curtaskinfo.name,num);
32 rt_task_wait_period(NULL);
33 }
34 }
35
36 int main(int argc, char* argv[])
37 {
38 char str[10] ;
39 int i;
40 int periods[3];
41
42 // Perform auto-init of rt_print buffers if the task doesn't do so
43 rt_print_auto_init(1);
44
45 // Lock memory : avoid memory swapping for this program
46 mlockall(MCL_CURRENT|MCL_FUTURE);
47
48 rt_printf("start task\n");
49
50 for (i=0; i<3; i++)
51 {
52 /*
53 * Arguments: &task,
54 * name,
55 * stack size (0=default),
56 * priority,
57 * mode (FPU, start suspended, ...)
58 */
59 sprintf(str,"hello-%d",i);
60 periods[i]=i+1;
61 rt_task_create(&demo_task, str, 0, 50, 0);
62
63 /*
64 * Arguments: &task,
65 * task function,
66 * function argument
67 */
68 rt_task_start(&demo_task, &demo, &periods[i]);
69 }
70 rt_printf("end program by CTRL-C\n");
71 pause();
72 }