source: asp_ewarm/asp-1.7.0/extension/mutex/test/test_mutex3.c@ 61

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

ASP for EWARM のコミット.

File size: 8.2 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2007,2008 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_mutex3.c 1696 2010-01-01 16:01:25Z ertl-hiro $
42 */
43
44/*
45 * ƒ~ƒ…
46[ƒeƒbƒNƒX‚̃eƒXƒg(3)
47 *
48 * yƒeƒXƒg‚Ì–Ú“Iz
49 *
50 * —Dæ“xãŒÀƒ~ƒ…
51[ƒeƒbƒNƒX‚ðCƒƒbƒN‚·‚鏈—‚ƃƒbƒN‰ðœ‚·‚鏈—‚ðˆê
52 * ’Ê‚èƒeƒXƒg‚·‚éDref_tsk‚É‚æ‚éƒx[ƒX—Dæ“x‚ÆŒ»Ý—Dæ“x‚ÌŽQÆˆ—‚̃e
53 * ƒXƒg‚àŒ“‚Ë‚Ä‚¢‚éD
54 *
55 * yƒeƒXƒg€–ځz
56 *
57 * (A) ƒ~ƒ…
58[ƒeƒbƒNƒX‚̃ƒbƒNˆ—iloc_mtxj
59 * (A-1) ƒƒbƒN‚³‚ê‚Ä‚¢‚È‚¢ê‡‚ɂ́C‚·‚®‚ɃƒbƒN‚Å‚«‚邱‚Æ
60 * (A-2) ‘½d‚ɃƒbƒN‚µ‚悤‚Æ‚·‚é‚ƁCE_ILUSEƒGƒ‰[‚ɂȂ邱‚Æ
61 * (A-3) ƒƒbƒN‚³‚ê‚Ä‚¢‚éê‡‚ɂ́C—Dæ“x‡‚Å‘Ò‚¿ó‘ԂɂȂ邱‚Æ
62 * (B) ƒ~ƒ…
63[ƒeƒbƒNƒX‚̃ƒbƒN‰ðœˆ—iunl_mtxj
64 * (B-1) ‘¼ƒ^ƒXƒN‚ªƒƒbƒN‚µ‚Ä‚¢‚éƒ~ƒ…
65[ƒeƒbƒNƒX‚ð‰ð•ú‚µ‚悤‚Æ‚·‚é‚Æ
66 * @@@E_ILUSEƒGƒ‰[‚ɂȂ邱‚Æ
67 * (B-2) ‘Ò‚¿ƒ^ƒXƒN‚ª‚È‚¢‚ƁC’P‚ɃƒbƒN‰ðœ‚·‚邱‚Æ
68 * (B-3) ‘Ò‚¿ƒ^ƒXƒN‚ɃƒbƒN‚ð“n‚·‚±‚Æ
69 * (B-4) ‘Ò‚¿ƒ^ƒXƒN‚ɃƒbƒN‚ð“n‚µ‚āCƒfƒBƒXƒpƒbƒ`‚ª‹N‚±‚邱‚Æ
70 * (C) ƒ~ƒ…
71[ƒeƒbƒNƒX‚̃ƒbƒNˆ—iploc_mtxj
72 * (C-1) ƒƒbƒN‚³‚ê‚Ä‚¢‚éê‡‚ɂ́C‚·‚®‚ÉE_TMOUTƒGƒ‰[‚ɂȂ邱‚Æ
73 * (D) ƒ~ƒ…
74[ƒeƒbƒNƒX‚̃ƒbƒNˆ—itloc_mtxj
75 * (D-1) ƒƒbƒN‚³‚ê‚Ä‚¢‚éê‡‚ɂ́Cƒ^ƒCƒ€ƒAƒEƒg•t‚«‚Ì‘Ò‚¿ó‘Ô‚É‚È
76 * @@@‚邱‚Æ
77 * (E) ‚¨‚Ü‚¯
78 * (E-1) ƒ^ƒXƒN‚ðI—¹‚·‚é‚ƁCƒ~ƒ…
79[ƒeƒbƒNƒX‚ðƒƒbƒN‰ðœ‚·‚邱‚Æ
80 *
81 * yŽg—pƒŠƒ\[ƒXz
82 *
83 * TASK1: ’á—Dæ“xƒ^ƒXƒNCƒƒCƒ“ƒ^ƒXƒNCÅ‰‚©‚ç‹N“®
84 * TASK2: ’†—Dæ“xƒ^ƒXƒN
85 * TASK3: ‚—Dæ“xƒ^ƒXƒN
86 * MTX1: ƒ~ƒ…
87[ƒeƒbƒNƒXiTA_CEILING‘®«CãŒÀ‚͍‚—Dæ“xj
88 *
89 * yƒeƒXƒgƒV[ƒPƒ“ƒXz
90 *
91 * == TASK1i—Dæ“xF’áj==
92 * call(set_bit_func(bit_mutex))
93 * 1: ref_mtx(MTX1, &rmtx)
94 * assert(rmtx.htskid == TSK_NONE)
95 * assert(rmtx.wtskid == TSK_NONE)
96 * loc_mtx(MTX1) ... (A-1)
97 * 2: ref_tsk(TASK1, &rtsk)
98 * assert(rtsk.tskpri == HIGH_PRIORITY)
99 * assert(rtsk.tskbpri == LOW_PRIORITY)
100 * loc_mtx(MTX1) -> E_ILUSE ... (A-2)
101 * 3: ref_mtx(MTX1, &rmtx)
102 * assert(rmtx.htskid == TASK1)
103 * assert(rmtx.wtskid == TSK_NONE)
104 * act_tsk(TASK2)
105 * 4: tslp_tsk(10) -> E_TMOUT
106 * == TASK2i—Dæ“xF’†j==
107 * 5: ploc_mtx(MTX1) -> E_TMOUT ... (C-1)
108 * loc_mtx(MTX1) ... (A-3)
109 * == TASK1i‘±‚«j==
110 * 6: ref_mtx(MTX1, &rmtx)
111 * assert(rmtx.htskid == TASK1)
112 * assert(rmtx.wtskid == TASK2)
113 * act_tsk(TASK3)
114 * 7: tslp_tsk(10) -> E_TMOUT
115 * == TASK3i—Dæ“xF‚j==
116 * 8: unl_mtx(MTX1) -> E_ILUSE ... (B-1)
117 * 9: loc_mtx(MTX1) ... (A-3)
118 * == TASK1i‘±‚«j==
119 * 10: ref_mtx(MTX1, &rmtx)
120 * assert(rmtx.htskid == TASK1)
121 * assert(rmtx.wtskid == TASK3)
122 * dis_dsp()
123 * unl_mtx(MTX1) ... (B-3)
124 * 11: ref_tsk(TASK1, &rtsk)
125 * assert(rtsk.tskpri == LOW_PRIORITY)
126 * assert(rtsk.tskbpri == LOW_PRIORITY)
127 * ref_mtx(MTX1, &rmtx)
128 * assert(rmtx.htskid == TASK3)
129 * assert(rmtx.wtskid == TASK2)
130 * ena_dsp()
131 * == TASK3i‘±‚«j==
132 * 12: ext_tsk() -> noreturn ... (E-1)
133 * == TASK2i‘±‚«j==
134 * 13: ref_tsk(TASK2, &rtsk)
135 * assert(rtsk.tskpri == HIGH_PRIORITY)
136 * assert(rtsk.tskbpri == MID_PRIORITY)
137 * unl_mtx(MTX1) ... (B-4)
138 * 14: loc_mtx(MTX1)
139 * 15: slp_tsk()
140 * == TASK1i‘±‚«j==
141 * 16: ref_mtx(MTX1, &rmtx)
142 * assert(rmtx.htskid == TASK2)
143 * assert(rmtx.wtskid == TSK_NONE)
144 * tloc_mtx(MTX1, 10) -> E_TMOUT ... (D-1)
145 * 17: wup_tsk(TASK2)
146 * == TASK2i‘±‚«j==
147 * 18: unl_mtx(MTX1) ... (B-2)
148 * 19: ext_tsk() -> noreturn
149 * == TASK1i‘±‚«j==
150 * 20: END
151 */
152
153#include <kernel.h>
154#include <t_syslog.h>
155#include "syssvc/logtask.h"
156#include "kernel_cfg.h"
157#include "test_lib.h"
158#include "test_mutex.h"
159
160extern ER bit_mutex(void);
161
162void
163task1(intptr_t exinf)
164{
165 ER ercd;
166 T_RTSK rtsk;
167 T_RMTX rmtx;
168
169 set_bit_func(bit_mutex);
170
171 check_point(1);
172 ercd = ref_mtx(MTX1, &rmtx);
173 check_ercd(ercd, E_OK);
174 check_assert(rmtx.htskid == TSK_NONE);
175 check_assert(rmtx.wtskid == TSK_NONE);
176
177 ercd = loc_mtx(MTX1);
178 check_ercd(ercd, E_OK);
179
180 check_point(2);
181 ercd = ref_tsk(TASK1, &rtsk);
182 check_ercd(ercd, E_OK);
183 check_assert(rtsk.tskpri == HIGH_PRIORITY);
184 check_assert(rtsk.tskbpri == LOW_PRIORITY);
185
186 ercd = loc_mtx(MTX1);
187 check_ercd(ercd, E_ILUSE);
188
189 check_point(3);
190 ercd = ref_mtx(MTX1, &rmtx);
191 check_ercd(ercd, E_OK);
192 check_assert(rmtx.htskid == TASK1);
193 check_assert(rmtx.wtskid == TSK_NONE);
194
195 ercd = act_tsk(TASK2);
196 check_ercd(ercd, E_OK);
197
198 check_point(4);
199 ercd = tslp_tsk(10);
200 check_ercd(ercd, E_TMOUT);
201
202 check_point(6);
203 ercd = ref_mtx(MTX1, &rmtx);
204 check_ercd(ercd, E_OK);
205 check_assert(rmtx.htskid == TASK1);
206 check_assert(rmtx.wtskid == TASK2);
207
208 ercd = act_tsk(TASK3);
209 check_ercd(ercd, E_OK);
210
211 check_point(7);
212 ercd = tslp_tsk(10);
213 check_ercd(ercd, E_TMOUT);
214
215 check_point(10);
216 ercd = ref_mtx(MTX1, &rmtx);
217 check_ercd(ercd, E_OK);
218 check_assert(rmtx.htskid == TASK1);
219 check_assert(rmtx.wtskid == TASK3);
220
221 ercd = dis_dsp();
222 check_ercd(ercd, E_OK);
223
224 ercd = unl_mtx(MTX1);
225 check_ercd(ercd, E_OK);
226
227 check_point(11);
228 ercd = ref_tsk(TASK1, &rtsk);
229 check_ercd(ercd, E_OK);
230 check_assert(rtsk.tskpri == LOW_PRIORITY);
231 check_assert(rtsk.tskbpri == LOW_PRIORITY);
232
233 ercd = ref_mtx(MTX1, &rmtx);
234 check_ercd(ercd, E_OK);
235 check_assert(rmtx.htskid == TASK3);
236 check_assert(rmtx.wtskid == TASK2);
237
238 ercd = ena_dsp();
239 check_ercd(ercd, E_OK);
240
241 check_point(16);
242 ercd = ref_mtx(MTX1, &rmtx);
243 check_ercd(ercd, E_OK);
244 check_assert(rmtx.htskid == TASK2);
245 check_assert(rmtx.wtskid == TSK_NONE);
246
247 ercd = tloc_mtx(MTX1, 10);
248 check_ercd(ercd, E_TMOUT);
249
250 check_point(17);
251 ercd = wup_tsk(TASK2);
252 check_ercd(ercd, E_OK);
253
254 check_finish(20);
255
256 check_point(0);
257}
258
259void
260task2(intptr_t exinf)
261{
262 ER ercd;
263 T_RTSK rtsk;
264
265 check_point(5);
266 ercd = ploc_mtx(MTX1);
267 check_ercd(ercd, E_TMOUT);
268
269 ercd = loc_mtx(MTX1);
270 check_ercd(ercd, E_OK);
271
272 check_point(13);
273 ercd = ref_tsk(TASK2, &rtsk);
274 check_ercd(ercd, E_OK);
275 check_assert(rtsk.tskpri == HIGH_PRIORITY);
276 check_assert(rtsk.tskbpri == MID_PRIORITY);
277
278 ercd = unl_mtx(MTX1);
279 check_ercd(ercd, E_OK);
280
281 check_point(14);
282 ercd = loc_mtx(MTX1);
283 check_ercd(ercd, E_OK);
284
285 check_point(15);
286 ercd = slp_tsk();
287 check_ercd(ercd, E_OK);
288
289 check_point(18);
290 ercd = unl_mtx(MTX1);
291 check_ercd(ercd, E_OK);
292
293 check_point(19);
294 ercd = ext_tsk();
295
296 check_point(0);
297}
298
299void
300task3(intptr_t exinf)
301{
302 ER ercd;
303
304 check_point(8);
305 ercd = unl_mtx(MTX1);
306 check_ercd(ercd, E_ILUSE);
307
308 check_point(9);
309 ercd = loc_mtx(MTX1);
310 check_ercd(ercd, E_OK);
311
312 check_point(12);
313 ercd = ext_tsk();
314
315 check_point(0);
316}
Note: See TracBrowser for help on using the repository browser.