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

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

ASP for EWARM のコミット.

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