source: asp_ewarm/asp-1.7.0/test/test_sem2.c@ 61

Last change on this file since 61 was 61, checked in by ertl-honda, 11 years ago

ASP for EWARM のコミット.

File size: 10.2 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2008,2009 by Embedded and Real-Time Systems Laboratory
6 * Graduate School of Information Science, Nagoya Univ., JAPAN
7 *
8 * ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
9 * ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
10 * •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
11 * (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
12 * Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
13 * ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
14 * (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
15 * —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ…
16ƒƒ“ƒgi—˜—p
17 * ŽÒƒ}ƒjƒ…
18ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
19 * ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
20 * (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
21 * —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
22 * ‚ƁD
23 * (a) Ä”z•z‚É”º‚¤ƒhƒLƒ…
24ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ…
25ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
26 * ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
27 * (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
28 * •ñ‚·‚邱‚ƁD
29 * (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
30 * ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
31 * ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
32 * —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
33 * –Ɛӂ·‚邱‚ƁD
34 *
35 * –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
36 * ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
37 * ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
38 * ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
39 * ‚̐ӔC‚𕉂í‚È‚¢D
40 *
41 * @(#) $Id: test_sem2.c 1577 2009-05-31 14:30:51Z ertl-hiro $
42 */
43
44/*
45 * ƒZƒ}ƒtƒH‹@”\‚̃eƒXƒg(2)
46 *
47 * yƒeƒXƒg‚Ì–Ú“Iz
48 *
49 * isig_sem‚ðCsig_sem‚Ƃ̈Ⴂ‚𒆐S‚ɃeƒXƒg‚·‚éD
50 * pol_semCtwai_sem‚ðCwai_sem‚Ƃ̈Ⴂ‚𒆐S‚ɃeƒXƒg‚·‚éD
51 *
52 * yƒeƒXƒg€–ځz
53 *
54 * (A) isig_sem‚̐ÓIƒGƒ‰[‚̃eƒXƒg
55 * (A-1) ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚©‚ç‚̌ďo‚µ
56 * (A-2) CPUƒƒbƒNó‘Ô‚©‚ç‚̌ďo‚µ
57 * (B) isig_sem‚É‚æ‚èƒZƒ}ƒtƒH‘Ò‚¿ó‘Ԃ̃^ƒXƒN‚ª‘Ò‚¿‰ðœ‚³‚ê‚é
58 * (B-1) ƒAƒCƒhƒ‹ó‘Ô‚©‚çC‘Ò‚¿‰ðœ‚³‚ꂽƒ^ƒXƒN‚ɐ؂芷‚í‚é
59 * (B-2) ŽÀsó‘Ԃ̃^ƒXƒN‚©‚çC‘Ò‚¿‰ðœ‚³‚ꂽƒ^ƒXƒN‚ɐ؂芷‚í‚é
60 * (B-3) ƒfƒBƒXƒpƒbƒ`•Û—¯ó‘ԂŁCØ‚芷‚í‚ç‚È‚¢
61 * (B-4) ‘Ò‚¿‰ðœ‚³‚ꂽƒ^ƒXƒN‚ª‹­§‘Ò‚¿ó‘ԂŁCØ‚芷‚í‚ç‚È‚¢
62 * (B-5) ‘Ò‚¿‰ðœ‚³‚ꂽƒ^ƒXƒN‚ª—Dæ“x‚ª’á‚­CØ‚芷‚í‚ç‚È‚¢
63 * (C) pol_sem‚̐ÓIƒGƒ‰[‚̃eƒXƒg
64 * (C-1) ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚©‚ç‚̌ďo‚µ
65 * (C-2) CPUƒƒbƒNó‘Ô‚©‚ç‚̌ďo‚µ
66 * (C-3) ƒfƒBƒXƒpƒbƒ`‹ÖŽ~ó‘Ô‚©‚ç‚̌ďo‚µiE_CTXƒGƒ‰[‚É‚È‚ç‚È‚¢j
67 * (C-4) Š„ž‚Ý—Dæ“xƒ}ƒXƒN‘S‰ðœ‚Å‚È‚¢ó‘Ô‚©‚ç‚̌ďo‚µiE_CTXƒGƒ‰[
68 * ‚É‚È‚ç‚È‚¢j
69 * (D) pol_sem‚Ń|[ƒŠƒ“ƒOŽ¸”s‚·‚é
70 * (E) twai_sem‚̐ÓIƒGƒ‰[‚̃eƒXƒg
71 * (E-1) ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚©‚ç‚̌ďo‚µ
72 * (E-2) CPUƒƒbƒNó‘Ô‚©‚ç‚̌ďo‚µ
73 * (E-3) ƒfƒBƒXƒpƒbƒ`‹ÖŽ~ó‘Ô‚©‚ç‚̌ďo‚µ
74 * (E-4) Š„ž‚Ý—Dæ“xƒ}ƒXƒN‘S‰ðœ‚Å‚È‚¢ó‘Ô‚©‚ç‚̌ďo‚µ
75 * (E-5) tmout‚ª•s³
76 * (F) twai_sem‚Åtmout=TMO_POL‚ÌŽž‚Ƀ|[ƒŠƒ“ƒOŽ¸”s‚·‚é
77 * (G) twai_sem‚Åtmout=TMO_FEVR‚ÌŽž‚ɃZƒ}ƒtƒH‘Ò‚¿ó‘Ô‚É‚È‚é
78 * (H) twai_sem‚Åtmout‚Ƀ^ƒCƒ€ƒAƒEƒg‚ðÝ’肵‚½Žž‚ɁCƒ^ƒCƒ€ƒAƒEƒg•t‚«‚Ì
79 * ƒZƒ}ƒtƒH‘Ò‚¿ó‘Ô‚É‚È‚é
80 *
81 * yŽg—pƒŠƒ\[ƒXz
82 *
83 * TASK1: ’†—Dæ“xƒ^ƒXƒNCTA_ACT‘®«
84 * TASK2: ‚—Dæ“xƒ^ƒXƒN
85 * TASK3: ’á—Dæ“xƒ^ƒXƒN
86 * TASK4: ’†—Dæ“xƒ^ƒXƒN
87 * TASK5: ’†—Dæ“xƒ^ƒXƒN
88 * ALM1: ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰
89 * SEM1: TA_NULL‘®«C‰ŠúŽ‘Œ¹”1CÅ‘厑Œ¹”1
90 *
91 * yƒeƒXƒgƒV[ƒPƒ“ƒXz
92 *
93 * == TASK1i—Dæ“xF’†j==
94 * 1: isig_sem(SEM1) -> E_CTX ... (A-1)
95 * 2: loc_cpu()
96 * pol_sem(SEM1) -> E_CTX ... (C-2)
97 * twai_sem(SEM1, TMO_POL) -> E_CTX ... (E-2)
98 * unl_cpu()
99 * 3: dis_dsp()
100 * pol_sem(SEM1) ... (C-3)
101 * twai_sem(SEM1, TMO_POL) -> E_CTX ... (E-3)
102 * ena_dsp()
103 * 4: chg_ipm(TMAX_INTPRI)
104 * pol_sem(SEM1) -> E_TMOUT ... (C-4)(D)
105 * twai_sem(SEM1, TMO_POL) -> E_CTX ... (E-4)
106 * chg_ipm(TIPM_ENAALL)
107 * 5: twai_sem(SEM1, -2) -> E_PAR ... (E-5)
108 * twai_sem(SEM1, TMO_POL) -> E_TMOUT ... (F)
109 * 6: sta_alm(ALM1, 10)
110 * 7: twai_sem(SEM1, TMO_FEVR) ... (G)
111 * == ALM1-1 ==
112 * 8: pol_sem(SEM1) -> E_CTX ... (C-1)
113 * twai_sem(SEM1, TMO_POL) -> E_CTX ... (E-1)
114 * 9: iloc_cpu()
115 * isig_sem(SEM1) -> E_CTX ... (A-2)
116 * iunl_cpu()
117 * 10: isig_sem(SEM1) ... (B-1)
118 * RETURN
119 * == TASK1i‘±‚«j==
120 * 11: act_tsk(TASK3)
121 * 12: wai_sem(SEM1)
122 * == TASK3i—Dæ“xF’áj==
123 * 13: sta_alm(ALM1, 10)
124 * call(wait_var())
125 * == ALM1-2 ==
126 * 14: isig_sem(SEM1) ... (B-2)
127 * call(signal_var())
128 * RETURN
129 * == TASK1i‘±‚«j==
130 * 15: wai_sem(SEM1)
131 * == TASK3i‘±‚«j==
132 * 16: sta_alm(ALM1, 10)
133 * dis_dsp()
134 * call(wait_var())
135 * == ALM1-3 ==
136 * 17: isig_sem(SEM1) ... (B-3)
137 * call(signal_var())
138 * RETURN
139 * == TASK3i‘±‚«j==
140 * 18: ena_dsp()
141 * == TASK1i‘±‚«j==
142 * 19: wai_sem(SEM1)
143 * == TASK3i‘±‚«j==
144 * 20: sta_alm(ALM1, 10)
145 * sus_tsk(TASK1)
146 * call(wait_var())
147 * == ALM1-4 ==
148 * 21: isig_sem(SEM1) ... (B-4)
149 * call(signal_var())
150 * RETURN
151 * == TASK3i‘±‚«j==
152 * 22: rsm_tsk(TASK1)
153 * == TASK1i‘±‚«j==
154 * 23: act_tsk(TASK2)
155 * == TASK2i—Dæ“xF‚j==
156 * 24: tslp_tsk(10) -> E_TMOUT
157 * == TASK1i‘±‚«j==
158 * 25: wai_sem(SEM1)
159 * == TASK3i‘±‚«j==
160 * 26: ext_tsk() -> noreturn
161 * == TASK2i‘±‚«j==
162 * 27: sta_alm(ALM1, 10)
163 * call(wait_var())
164 * == ALM1-5 ==
165 * 28: isig_sem(SEM1) ... (B-5)
166 * call(signal_var())
167 * RETURN
168 * == TASK2i‘±‚«j==
169 * 29: ext_tsk() -> noreturn
170 * == TASK1i‘±‚«j==
171 * 30: sta_alm(ALM1, 10)
172 * 31: twai_sem(SEM1, 100) -> E_RLWAI
173 * == ALM1-6 ==
174 * 32: irel_wai(TASK1)
175 * RETURN
176 * == TASK1i‘±‚«j==
177 * 33: sta_alm(ALM1, 100)
178 * 34: twai_sem(SEM1, 10) -> E_TMOUT ... (H)
179 * 35: stp_alm(ALM1)
180 * 36: END
181 */
182
183#include <kernel.h>
184#include <test_lib.h>
185#include <t_syslog.h>
186#include "kernel_cfg.h"
187#include "test_sem2.h"
188
189static volatile bool_t flagvar;
190
191static void
192wait_var(void)
193{
194 flagvar = false;
195 while (!flagvar);
196}
197
198static void
199signal_var(void)
200{
201 flagvar = true;
202}
203
204static uint_t alarm1_count = 0;
205
206void
207alarm1_handler(intptr_t exinf)
208{
209 ER ercd;
210
211 switch (++alarm1_count) {
212 case 1:
213 check_point(8);
214 ercd = pol_sem(SEM1);
215 check_ercd(ercd, E_CTX);
216
217 ercd = twai_sem(SEM1, TMO_POL);
218 check_ercd(ercd, E_CTX);
219
220 check_point(9);
221 ercd = iloc_cpu();
222 check_ercd(ercd, E_OK);
223
224 ercd = isig_sem(SEM1);
225 check_ercd(ercd, E_CTX);
226
227 ercd = iunl_cpu();
228 check_ercd(ercd, E_OK);
229
230 check_point(10);
231 ercd = isig_sem(SEM1);
232 check_ercd(ercd, E_OK);
233
234 return;
235
236 check_point(0);
237
238 case 2:
239 check_point(14);
240 ercd = isig_sem(SEM1);
241 check_ercd(ercd, E_OK);
242
243 signal_var();
244
245 return;
246
247 check_point(0);
248
249 case 3:
250 check_point(17);
251 ercd = isig_sem(SEM1);
252 check_ercd(ercd, E_OK);
253
254 signal_var();
255
256 return;
257
258 check_point(0);
259
260 case 4:
261 check_point(21);
262 ercd = isig_sem(SEM1);
263 check_ercd(ercd, E_OK);
264
265 signal_var();
266
267 return;
268
269 check_point(0);
270
271 case 5:
272 check_point(28);
273 ercd = isig_sem(SEM1);
274 check_ercd(ercd, E_OK);
275
276 signal_var();
277
278 return;
279
280 check_point(0);
281
282 case 6:
283 check_point(32);
284 ercd = irel_wai(TASK1);
285 check_ercd(ercd, E_OK);
286
287 return;
288
289 check_point(0);
290 }
291 check_point(0);
292}
293
294void
295task1(intptr_t exinf)
296{
297 ER ercd;
298
299 check_point(1);
300 ercd = isig_sem(SEM1);
301 check_ercd(ercd, E_CTX);
302
303 check_point(2);
304 ercd = loc_cpu();
305 check_ercd(ercd, E_OK);
306
307 ercd = pol_sem(SEM1);
308 check_ercd(ercd, E_CTX);
309
310 ercd = twai_sem(SEM1, TMO_POL);
311 check_ercd(ercd, E_CTX);
312
313 ercd = unl_cpu();
314 check_ercd(ercd, E_OK);
315
316 check_point(3);
317 ercd = dis_dsp();
318 check_ercd(ercd, E_OK);
319
320 ercd = pol_sem(SEM1);
321 check_ercd(ercd, E_OK);
322
323 ercd = twai_sem(SEM1, TMO_POL);
324 check_ercd(ercd, E_CTX);
325
326 ercd = ena_dsp();
327 check_ercd(ercd, E_OK);
328
329 check_point(4);
330 ercd = chg_ipm(TMAX_INTPRI);
331 check_ercd(ercd, E_OK);
332
333 ercd = pol_sem(SEM1);
334 check_ercd(ercd, E_TMOUT);
335
336 ercd = twai_sem(SEM1, TMO_POL);
337 check_ercd(ercd, E_CTX);
338
339 ercd = chg_ipm(TIPM_ENAALL);
340 check_ercd(ercd, E_OK);
341
342 check_point(5);
343 ercd = twai_sem(SEM1, -2);
344 check_ercd(ercd, E_PAR);
345
346 ercd = twai_sem(SEM1, TMO_POL);
347 check_ercd(ercd, E_TMOUT);
348
349 check_point(6);
350 ercd = sta_alm(ALM1, 10);
351 check_ercd(ercd, E_OK);
352
353 check_point(7);
354 ercd = twai_sem(SEM1, TMO_FEVR);
355 check_ercd(ercd, E_OK);
356
357 check_point(11);
358 ercd = act_tsk(TASK3);
359 check_ercd(ercd, E_OK);
360
361 check_point(12);
362 ercd = wai_sem(SEM1);
363 check_ercd(ercd, E_OK);
364
365 check_point(15);
366 ercd = wai_sem(SEM1);
367 check_ercd(ercd, E_OK);
368
369 check_point(19);
370 ercd = wai_sem(SEM1);
371 check_ercd(ercd, E_OK);
372
373 check_point(23);
374 ercd = act_tsk(TASK2);
375 check_ercd(ercd, E_OK);
376
377 check_point(25);
378 ercd = wai_sem(SEM1);
379 check_ercd(ercd, E_OK);
380
381 check_point(30);
382 ercd = sta_alm(ALM1, 10);
383 check_ercd(ercd, E_OK);
384
385 check_point(31);
386 ercd = twai_sem(SEM1, 100);
387 check_ercd(ercd, E_RLWAI);
388
389 check_point(33);
390 ercd = sta_alm(ALM1, 100);
391 check_ercd(ercd, E_OK);
392
393 check_point(34);
394 ercd = twai_sem(SEM1, 10);
395 check_ercd(ercd, E_TMOUT);
396
397 check_point(35);
398 ercd = stp_alm(ALM1);
399 check_ercd(ercd, E_OK);
400
401 check_finish(36);
402
403 check_point(0);
404}
405
406void
407task2(intptr_t exinf)
408{
409 ER ercd;
410
411 check_point(24);
412 ercd = tslp_tsk(10);
413 check_ercd(ercd, E_TMOUT);
414
415 check_point(27);
416 ercd = sta_alm(ALM1, 10);
417 check_ercd(ercd, E_OK);
418
419 wait_var();
420
421 check_point(29);
422 ercd = ext_tsk();
423
424 check_point(0);
425}
426
427void
428task3(intptr_t exinf)
429{
430 ER ercd;
431
432 check_point(13);
433 ercd = sta_alm(ALM1, 10);
434 check_ercd(ercd, E_OK);
435
436 wait_var();
437
438 check_point(16);
439 ercd = sta_alm(ALM1, 10);
440 check_ercd(ercd, E_OK);
441
442 ercd = dis_dsp();
443 check_ercd(ercd, E_OK);
444
445 wait_var();
446
447 check_point(18);
448 ercd = ena_dsp();
449 check_ercd(ercd, E_OK);
450
451 check_point(20);
452 ercd = sta_alm(ALM1, 10);
453 check_ercd(ercd, E_OK);
454
455 ercd = sus_tsk(TASK1);
456 check_ercd(ercd, E_OK);
457
458 wait_var();
459
460 check_point(22);
461 ercd = rsm_tsk(TASK1);
462 check_ercd(ercd, E_OK);
463
464 check_point(26);
465 ercd = ext_tsk();
466
467 check_point(0);
468}
Note: See TracBrowser for help on using the repository browser.