1 /*
2 * Description: Code to demonstrate Alarm handler APIs
3 * File: main.c
4 *
5 * (c) Viometrix Private Limited and T-Engine Developer Network (TEDN), 2008 - 2009.
6 *
7 */
8
9 #include <basic.h>
10 #include <tk/tkernel.h>
11 #include <stdio.h>
12
13 IMPORT void task1 (INT, VP);
14 IMPORT void almhdr1 (VP);
15
16
17 ID taskid1 = -1;
18 ID almid1 = -1;
19
20 /* main: main function to launch the tasks
21 * ac >= 0 : launch the application
22 * ac < 0 : unload the application
23 */
24 EXPORT ER
25 main (INT ac, UB * av[])
26 {
27 T_CTSK ctsk;
28 T_CALM calm;
29 ER ercd = 0;
30 SYSTIM systime;
31
32 printf
33 ("This code demonstrates basic alarm handler APIs:\n cre, sta, del\n");
34
35 if (ac < 0)
36 {
37 if (taskid1 >= 0)
38 {
39 ercd = tk_ter_tsk (taskid1);
40 if (ercd < 0)
41 printf ("tk_ter_tsk err = %x\n", ercd);
42 ercd = tk_del_tsk (taskid1);
43 if (ercd < 0)
44 printf ("tk_del_tsk err = %x\n", ercd);
45 }
46 goto ext;
47 }
48
49 /* ---------------- TASK 1 --------------- */
50 /* Set up the context for the task */
51 ctsk.exinf = (VP) 0x00; /* No extended information */
52 ctsk.tskatr = TA_HLNG | TA_RNG0; /* Run the task at Ring 0 - doesn't matter without MMU */
53 ctsk.task = task1; /* start address of the task */
54 ctsk.itskpri = 80; /* task initial priority */
55 ctsk.stksz = 8192; /* stack size */
56
57 /* Create the task */
58 taskid1 = tk_cre_tsk (&ctsk);
59 if (taskid1 < E_OK)
60 { /* task creation failed */
61 printf ("Task creation failed. Error code = %x\n", ercd);
62 goto exit_point;
63 }
64
65 printf ("Task 1 created. Task ID = %d.\n", taskid1);
66
67 /* Launch the task */
68 printf ("Launching Task 1 now.\n");
69 tk_sta_tsk (taskid1, 0);
70
71 /* ---------------- Alarm Handler --------------- */
72 /* Set up the context for the Alarm handler */
73 calm.exinf = (VP) 0x00; /* No extended information */
74 calm.almatr = TA_HLNG | TA_RNG0; /* Run the almhdr at Ring 0 - doesn't matter without MMU */
75 calm.almhdr = almhdr1; /* start address of the alm handler */
76
77
78 /* Create the task */
79 almid1 = tk_cre_alm (&calm);
80 if (almid1 < E_OK)
81 { /* Alarm creation failed */
82 printf ("AlmHdr creation failed. Error code = %x\n", ercd);
83 goto exit_point;
84 }
85
86 printf ("Alarm Handler created. Alm Hdr ID = %d.\n", almid1);
87
88
89 ercd = tk_get_tim (&systime);
90 printf ("Systime hi = %d lo = %ul\n", systime.hi, systime.lo);
91
92 /* Launch the Almhdr */
93 ercd = tk_get_otm (&systime);
94 printf ("OS time hi = %d lo = %ul\n", systime.hi, systime.lo);
95
96 tk_sta_alm (almid1, 10000);
97
98 tk_dly_tsk (20000);
99
100 ercd = tk_get_otm (&systime);
101 printf ("OS time hi = %d lo = %ul\n", systime.hi, systime.lo);
102
103 //Terminating and deleting Almhdr
104 ercd = tk_stp_alm (almid1);
105 if (ercd < 0)
106 {
107 printf ("Cannot Stop Almhdr");
108 goto exit_point;
109 }
110 else
111 {
112 printf ("Almhdr Stopped \n");
113 }
114
115 ercd = tk_del_alm (almid1);
116 if (ercd < 0)
117 {
118 printf ("Cannot delete Almhdr\n");
119 goto exit_point;
120 }
121 else
122 {
123 printf ("Almhdr deleted \n");
124 }
125 //Terminating and deleting Task-1
126 ercd = tk_ter_tsk (taskid1);
127 if (ercd < 0)
128 {
129 printf ("Cannot terminate Task-1");
130 goto exit_point;
131 }
132 else
133 {
134 printf ("Task-1 Terminated \n");
135 }
136 ercd = tk_del_tsk (taskid1);
137 if (ercd < 0)
138 {
139 printf ("Cannot delete Task-1");
140 goto exit_point;
141 }
142 else
143 {
144 printf ("Task-1 deleted \n");
145 }
146
147
148 exit_point:
149 ext:
150 printf ("main ended\n");
151 return 0;
152 }
153
154 /*****************************************************************
155 task1- Waiting forever-Wakenup by Almhdr every 5 seconds
156 ****************************************************************/
157 IMPORT void
158 task1 (INT stacd, VP exinf)
159 {
160
161 ER ercd = 0;
162 SYSTIM systime;
163 printf ("This is task 1-waiting forever\n");
164 while (1)
165 {
166 tk_slp_tsk (-1);
167 printf ("Task-1 Waken up\n");
168 ercd = tk_get_tim (&systime);
169 printf ("Systime hi = %d lo = %ul\n", systime.hi, systime.lo);
170 }
171 }
172
173 /*****************************************************************
174 Almhdr wakes up task-1 after 10 seconds
175 ****************************************************************/
176 IMPORT void
177 almhdr1 (VP exinf)
178 {
179 /* Wakes up Task 1 after the specified time */
180 tk_wup_tsk (taskid1);
181 }
Comments
Click here to Post a Comment