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

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

ASP for EWARM のコミット.

File size: 15.1 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_mutex7.c 1696 2010-01-01 16:01:25Z ertl-hiro $
42 */
43
44/*
45 * ƒ~ƒ…
46[ƒeƒbƒNƒX‚̃eƒXƒg(7)
47 *
48 * yƒeƒXƒg‚Ì–Ú“Iz
49 *
50 * —Dæ“xãŒÀƒ~ƒ…
51[ƒeƒbƒNƒX‚ɑ΂µ‚āCƒ^ƒXƒN‚Ì‹­§I—¹Žž‚̃~ƒ…
52[ƒeƒbƒN
53 * ƒXŠÖ˜A‚̏ˆ—‚ð–Ô—…
54“I‚ɃeƒXƒg‚·‚éD
55 *
56 * yƒeƒXƒg€–ځz
57 *
58 * (A) ƒ^ƒXƒN‚Ì‹­§I—¹Žžiter_tskj
59 * (A-1) ƒƒbƒN‚µ‚Ä‚¢‚½ƒ~ƒ…
60[ƒeƒbƒNƒXi1‚j‚ªƒƒbƒN‰ðœ‚³‚ê‚邱‚ƁD
61 * (A-2) ƒƒbƒN‚µ‚Ä‚¢‚½ƒ~ƒ…
62[ƒeƒbƒNƒXi1‚j‚ªƒƒbƒN‰ðœ‚³‚êCƒƒb
63 * ƒN‚ð‘Ò‚Á‚Ä‚¢‚½ƒ^ƒXƒN‚ª‚»‚ê‚ðƒƒbƒN‚µC—Dæ“x‚ª•Ï‰»‚µC‘Ò
64 * ‚¿‰ðœ‚³‚ê‚邱‚ƁD
65 * (A-3) (A-2)‚ÌŒ‹‰ÊCƒ^ƒXƒNƒfƒBƒXƒpƒbƒ`‚ª‹N‚±‚邱‚ƁD
66 * (A-4) ƒƒbƒN‚µ‚Ä‚¢‚½ƒ~ƒ…
67[ƒeƒbƒNƒXi•¡”j‚ª‚·‚ׂăƒbƒN‰ðœ‚³
68 * ‚ê‚邱‚ƁD
69 * (A-5) ƒƒbƒN‚µ‚Ä‚¢‚½ƒ~ƒ…
70[ƒeƒbƒNƒXi•¡”j‚ªƒƒbƒN‰ðœ‚³‚êCƒƒb
71 * ƒN‚ð‘Ò‚Á‚Ä‚¢‚½ƒ^ƒXƒNi•¡”j‚ª‚»‚ê‚ðƒƒbƒN‚µC—Dæ“x‚ª•Ï
72 * ‰»‚µC‘Ò‚¿‰ðœ‚³‚ê‚邱‚ƁD‚»‚ÌŽž‚ɁCŒã‚Ń~ƒ…
73[ƒeƒbƒNƒX‚ð
74 * ƒƒbƒN‚µ‚½ƒ^ƒXƒNiæ‚ɃƒbƒN‚µ‚Ä‚¢‚½ƒ~ƒ…
75[ƒeƒbƒNƒX‚ð‘Ò‚Á
76 * ‚Ä‚¢‚½ƒ^ƒXƒNj‚Ì•û‚ªC—Dæ‡ˆÊ‚ª‚‚­‚Ȃ邱‚ƁD
77 * (A-6) (A-5)‚ÌŒ‹‰ÊCƒ^ƒXƒNƒfƒBƒXƒpƒbƒ`‚ª‹N‚±‚邱‚ƁD
78 *
79 * yƒeƒXƒg€–Ú‚ÌŽÀŒ»•û–@z
80 *
81 * (A-1)
82 * ’á—Dæ“xƒ^ƒXƒNiTASK2j‚Ƀ~ƒ…
83[ƒeƒbƒNƒXiMTX1j‚ðƒƒbƒN‚³‚¹C•Ê
84 * ‚̃^ƒXƒNiTASK1j‚©‚çTASK2‚ðter_tsk‚·‚é‚ƁCƒƒbƒN‚ª‰ðœ‚³‚ê‚邱
85 * ‚Æ‚ðŠm”F‚·‚éD
86 * (A-2)
87 * ’á—Dæ“xƒ^ƒXƒNiTASK2j‚É’†—Dæ“xãŒÀƒ~ƒ…
88[ƒeƒbƒNƒXiMTX1j‚ðƒƒb
89 * ƒN‚³‚¹C•Ê‚Ì’á—Dæ“xƒ^ƒXƒNiTASK3j‚ÉMTX1‚ð‘Ò‚½‚¹‚½ó‘ԂŁC‚—D
90 * æ“xƒ^ƒXƒNiTASK1j‚©‚çTASK2‚ðter_tsk‚·‚é‚ƁCTASK3‚ª’†—Dæ“x‚É
91 * ‚È‚Á‚Ä‘Ò‚¿‰ðœ‚³‚ê‚邱‚Æ‚ðŠm”F‚·‚éD
92 * (A-3)
93 * ’á—Dæ“xƒ^ƒXƒNiTASK2j‚É’†—Dæ“xãŒÀƒ~ƒ…
94[ƒeƒbƒNƒXiMTX1j‚ðƒƒb
95 * ƒN‚³‚¹C•Ê‚Ì’á—Dæ“xƒ^ƒXƒNiTASK3j‚ÉMTX1‚ð‘Ò‚½‚¹‚½ó‘ԂŁC•Ê‚Ì
96 * ’á—Dæ“xƒ^ƒXƒNiTASK1j‚©‚çTASK2‚ðter_tsk‚·‚é‚ƁCTASK3‚ª’†—Dæ
97 * “x‚É‚È‚Á‚Ä‘Ò‚¿‰ðœ‚³‚êCTASK3‚ɐ؂芷‚í‚邱‚Æ‚ðŠm”F‚·‚éD
98 * (A-4)
99 * ’á—Dæ“xƒ^ƒXƒNiTASK2j‚Ƀ~ƒ…
100[ƒeƒbƒNƒX‚ð2‚iMTX1CMTX2jƒƒb
101 * ƒN‚³‚¹C•Ê‚̃^ƒXƒNiTASK1j‚©‚çTASK2‚ðter_tsk‚·‚é‚ƁC—¼•û‚̃ƒb
102 * ƒN‚ª‰ðœ‚³‚ê‚邱‚Æ‚ðŠm”F‚·‚éD
103 * (A-5)
104 * ’á—Dæ“xƒ^ƒXƒNiTASK2j‚ɍ‚—Dæ“xãŒÀƒ~ƒ…
105[ƒeƒbƒNƒX2‚iMTX1C
106 * MTX2j‚ð‚±‚Ì‡‚эƒbƒN‚³‚¹C•Ê‚Ì’á—Dæ“xƒ^ƒXƒN2‚iTASK3C
107 * TASK4j‚É‚»‚ꂼ‚ê‚̃ƒbƒN‚ð‘Ò‚½‚¹‚½ó‘ԂŁC‚—Dæ“xƒ^ƒXƒN
108 * iTASK1j‚©‚çTASK2‚ðter_tsk‚·‚é‚ƁCTASK3‚ÆTASK4‚ª’†—Dæ“x‚É‚È‚Á
109 * ‚Ä‘Ò‚¿‰ðœ‚³‚ê‚邱‚Æ‚ðŠm”F‚·‚éD‚Ü‚½Cæ‚ɃƒbƒN‚µ‚Ä‚¢‚½ƒ~ƒ…
110[
111 * ƒeƒbƒNƒXiMTX1j‚ð‘Ò‚Á‚Ä‚¢‚½ƒ^ƒXƒNiTASK3j‚ªCTASK4‚æ‚è‚à—Dæ
112 * ‡ˆÊ‚ª‚‚­‚Ȃ邱‚Æ‚ðŠm”F‚·‚éD
113 * (A-6)
114 * ’á—Dæ“xƒ^ƒXƒNiTASK2j‚ɍ‚—Dæ“xãŒÀƒ~ƒ…
115[ƒeƒbƒNƒX2‚iMTX1C
116 * MTX2j‚ð‚±‚Ì‡‚эƒbƒN‚³‚¹C•Ê‚Ì’á—Dæ“xƒ^ƒXƒN2‚iTASK3C
117 * TASK4j‚É‚»‚ꂼ‚ê‚̃ƒbƒN‚ð‘Ò‚½‚¹‚½ó‘ԂŁC•Ê‚Ì’á—Dæ“xƒ^ƒXƒN
118 * iTASK1j‚©‚çTASK2 ‚ðter_tsk‚·‚é‚ƁCTASK3‚ÆTASK4‚ª’†—Dæ“x‚É‚È‚Á
119 * ‚Ä‘Ò‚¿‰ðœ‚³‚êCTASK3‚ɐ؂芷‚í‚邱‚Æ‚ðŠm”F‚·‚éD
120 *
121 * yŽg—pƒŠƒ\[ƒXz
122 *
123 * TASK1: ‚—Dæ“xƒ^ƒXƒNCƒƒCƒ“ƒ^ƒXƒNCÅ‰‚©‚ç‹N“®
124 * TASK2: ’á—Dæ“xƒ^ƒXƒN
125 * TASK3: ’á—Dæ“xƒ^ƒXƒN
126 * TASK4: ’á—Dæ“xƒ^ƒXƒN
127 * MTX1: ƒ~ƒ…
128[ƒeƒbƒNƒXiTA_CEILING‘®«CãŒÀ‚Í’†—Dæ“xj
129 * MTX2: ƒ~ƒ…
130[ƒeƒbƒNƒXiTA_CEILING‘®«CãŒÀ‚Í’†—Dæ“xj
131 *
132 * yƒeƒXƒgƒV[ƒPƒ“ƒXz
133 *
134 * == TASK1i—Dæ“xF‚j==
135 * call(set_bit_func(bit_mutex))
136 * 1: act_tsk(TASK2)
137 * 2: slp_tsk()
138 * == TASK2-1i—Dæ“xF’áj==
139 * 3: loc_mtx(MTX1)
140 * 4: wup_tsk(TASK1)
141 * == TASK1i‘±‚«j==
142 * 5: ter_tsk(TASK2) ... (A-1)
143 * 6: ref_mtx(MTX1, &rmtx)
144 * assert(rmtx.htskid == TSK_NONE)
145 * assert(rmtx.wtskid == TSK_NONE)
146 *
147 * 7: act_tsk(TASK2)
148 * act_tsk(TASK3)
149 * 8: slp_tsk()
150 * == TASK2-2i—Dæ“xF’áj==
151 * 9: loc_mtx(MTX1)
152 * 10: tslp_tsk(10) -> E_TMOUT
153 * == TASK3-1i—Dæ“xF’áj==
154 * 11: loc_mtx(MTX1)
155 * == TASK2-2i‘±‚«j==
156 * 12: wup_tsk(TASK1)
157 * == TASK1i‘±‚«j==
158 * 13: ter_tsk(TASK2) ... (A-2)
159 * 14: ref_mtx(MTX1, &rmtx)
160 * assert(rmtx.htskid == TASK3)
161 * assert(rmtx.wtskid == TSK_NONE)
162 * get_pri(TASK3, &tskpri)
163 * assert(tskpri == MID_PRIORITY)
164 * 15: ter_tsk(TASK3)
165 *
166 * 16: act_tsk(TASK2)
167 * act_tsk(TASK3)
168 * 17: chg_pri(TSK_SELF, LOW_PRIORITY)
169 * == TASK2-3i—Dæ“xF’áj==
170 * 18: loc_mtx(MTX1)
171 * 19: slp_tsk()
172 * == TASK3-2i—Dæ“xF’áj==
173 * 20: loc_mtx(MTX1)
174 * == TASK1i‘±‚«j==
175 * 21: ter_tsk(TASK2) ... (A-3)
176 * == TASK3-2i‘±‚«j==
177 * 22: ref_mtx(MTX1, &rmtx)
178 * assert(rmtx.htskid == TASK3)
179 * assert(rmtx.wtskid == TSK_NONE)
180 * get_pri(TASK3, &tskpri)
181 * assert(tskpri == MID_PRIORITY)
182 * 23: ext_tsk() -> noreturn
183 * == TASK1i‘±‚«j==
184 * 24: chg_pri(TSK_SELF, HIGH_PRIORITY)
185 *
186 * 25: act_tsk(TASK2)
187 * 26: slp_tsk()
188 * == TASK2-4i—Dæ“xF’áj==
189 * 27: loc_mtx(MTX1)
190 * loc_mtx(MTX2)
191 * 28: wup_tsk(TASK1)
192 * == TASK1i‘±‚«j==
193 * 29: ter_tsk(TASK2) ... (A-4)
194 * 30: ref_mtx(MTX1, &rmtx)
195 * assert(rmtx.htskid == TSK_NONE)
196 * assert(rmtx.wtskid == TSK_NONE)
197 * ref_mtx(MTX2, &rmtx)
198 * assert(rmtx.htskid == TSK_NONE)
199 * assert(rmtx.wtskid == TSK_NONE)
200 * 31: MISSING
201 *
202 * 32: act_tsk(TASK2)
203 * act_tsk(TASK3)
204 * act_tsk(TASK4)
205 * 33: slp_tsk()
206 * == TASK2-5i—Dæ“xF’áj==
207 * 34: loc_mtx(MTX1)
208 * loc_mtx(MTX2)
209 * 35: tslp_tsk(10) -> E_TMOUT
210 * == TASK3-3i—Dæ“xF’áj==
211 * 36: loc_mtx(MTX1)
212 * == TASK4-1i—Dæ“xF’áj==
213 * 37: loc_mtx(MTX2)
214 * == TASK2-5i‘±‚«j==
215 * 38: wup_tsk(TASK1)
216 * == TASK1i‘±‚«j==
217 * 39: ter_tsk(TASK2) ... (A-5)
218 * 40: ref_mtx(MTX1, &rmtx)
219 * assert(rmtx.htskid == TASK3)
220 * assert(rmtx.wtskid == TSK_NONE)
221 * ref_mtx(MTX2, &rmtx)
222 * assert(rmtx.htskid == TASK4)
223 * assert(rmtx.wtskid == TSK_NONE)
224 * get_pri(TASK3, &tskpri)
225 * assert(tskpri == MID_PRIORITY)
226 * get_pri(TASK4, &tskpri)
227 * assert(tskpri == MID_PRIORITY)
228 * 41: chg_pri(TSK_SELF, LOW_PRIORITY)
229 * == TASK3-3i‘±‚«j==
230 * 42: ext_tsk() -> noreturn
231 * == TASK4-1i‘±‚«j==
232 * 43: ext_tsk() -> noreturn
233 * == TASK1i‘±‚«j==
234 * 44: act_tsk(TASK2)
235 * act_tsk(TASK3)
236 * act_tsk(TASK4)
237 * 45: chg_pri(TSK_SELF, LOW_PRIORITY)
238 * == TASK2-6i—Dæ“xF’áj==
239 * 46: loc_mtx(MTX1)
240 * loc_mtx(MTX2)
241 * 47: slp_tsk()
242 * == TASK3-4i—Dæ“xF’áj==
243 * 48: loc_mtx(MTX1)
244 * == TASK4-2i—Dæ“xF’áj==
245 * 49: loc_mtx(MTX2)
246 * == TASK1i‘±‚«j==
247 * 50: ter_tsk(TASK2) ... (A-6)
248 * == TASK3-4i‘±‚«j==
249 * 51: ref_mtx(MTX1, &rmtx)
250 * assert(rmtx.htskid == TASK3)
251 * assert(rmtx.wtskid == TSK_NONE)
252 * ref_mtx(MTX2, &rmtx)
253 * assert(rmtx.htskid == TASK4)
254 * assert(rmtx.wtskid == TSK_NONE)
255 * get_pri(TASK3, &tskpri)
256 * assert(tskpri == MID_PRIORITY)
257 * get_pri(TASK4, &tskpri)
258 * assert(tskpri == MID_PRIORITY)
259 * 52: ext_tsk() -> noreturn
260 * == TASK4-2i‘±‚«j==
261 * 53: ext_tsk() -> noreturn
262 * == TASK1i‘±‚«j==
263 * 54: END
264 */
265
266#include <kernel.h>
267#include <t_syslog.h>
268#include "syssvc/logtask.h"
269#include "kernel_cfg.h"
270#include "test_lib.h"
271#include "test_mutex7.h"
272
273extern ER bit_mutex(void);
274
275void
276task1(intptr_t exinf)
277{
278 ER ercd;
279 PRI tskpri;
280 T_RMTX rmtx;
281
282 set_bit_func(bit_mutex);
283
284 check_point(1);
285 ercd = act_tsk(TASK2);
286 check_ercd(ercd, E_OK);
287
288 check_point(2);
289 ercd = slp_tsk();
290 check_ercd(ercd, E_OK);
291
292 check_point(5);
293 ercd = ter_tsk(TASK2);
294 check_ercd(ercd, E_OK);
295
296 check_point(6);
297 ercd = ref_mtx(MTX1, &rmtx);
298 check_ercd(ercd, E_OK);
299 check_assert(rmtx.htskid == TSK_NONE);
300 check_assert(rmtx.wtskid == TSK_NONE);
301
302 check_point(7);
303 ercd = act_tsk(TASK2);
304 check_ercd(ercd, E_OK);
305
306 ercd = act_tsk(TASK3);
307 check_ercd(ercd, E_OK);
308
309 check_point(8);
310 ercd = slp_tsk();
311 check_ercd(ercd, E_OK);
312
313 check_point(13);
314 ercd = ter_tsk(TASK2);
315 check_ercd(ercd, E_OK);
316
317 check_point(14);
318 ercd = ref_mtx(MTX1, &rmtx);
319 check_ercd(ercd, E_OK);
320 check_assert(rmtx.htskid == TASK3);
321 check_assert(rmtx.wtskid == TSK_NONE);
322
323 ercd = get_pri(TASK3, &tskpri);
324 check_ercd(ercd, E_OK);
325 check_assert(tskpri == MID_PRIORITY);
326
327 check_point(15);
328 ercd = ter_tsk(TASK3);
329 check_ercd(ercd, E_OK);
330
331 check_point(16);
332 ercd = act_tsk(TASK2);
333 check_ercd(ercd, E_OK);
334
335 ercd = act_tsk(TASK3);
336 check_ercd(ercd, E_OK);
337
338 check_point(17);
339 ercd = chg_pri(TSK_SELF, LOW_PRIORITY);
340 check_ercd(ercd, E_OK);
341
342 check_point(21);
343 ercd = ter_tsk(TASK2);
344 check_ercd(ercd, E_OK);
345
346 check_point(24);
347 ercd = chg_pri(TSK_SELF, HIGH_PRIORITY);
348 check_ercd(ercd, E_OK);
349
350 check_point(25);
351 ercd = act_tsk(TASK2);
352 check_ercd(ercd, E_OK);
353
354 check_point(26);
355 ercd = slp_tsk();
356 check_ercd(ercd, E_OK);
357
358 check_point(29);
359 ercd = ter_tsk(TASK2);
360 check_ercd(ercd, E_OK);
361
362 check_point(30);
363 ercd = ref_mtx(MTX1, &rmtx);
364 check_ercd(ercd, E_OK);
365 check_assert(rmtx.htskid == TSK_NONE);
366 check_assert(rmtx.wtskid == TSK_NONE);
367
368 ercd = ref_mtx(MTX2, &rmtx);
369 check_ercd(ercd, E_OK);
370 check_assert(rmtx.htskid == TSK_NONE);
371 check_assert(rmtx.wtskid == TSK_NONE);
372
373 check_point(31);
374
375 check_point(32);
376 ercd = act_tsk(TASK2);
377 check_ercd(ercd, E_OK);
378
379 ercd = act_tsk(TASK3);
380 check_ercd(ercd, E_OK);
381
382 ercd = act_tsk(TASK4);
383 check_ercd(ercd, E_OK);
384
385 check_point(33);
386 ercd = slp_tsk();
387 check_ercd(ercd, E_OK);
388
389 check_point(39);
390 ercd = ter_tsk(TASK2);
391 check_ercd(ercd, E_OK);
392
393 check_point(40);
394 ercd = ref_mtx(MTX1, &rmtx);
395 check_ercd(ercd, E_OK);
396 check_assert(rmtx.htskid == TASK3);
397 check_assert(rmtx.wtskid == TSK_NONE);
398
399 ercd = ref_mtx(MTX2, &rmtx);
400 check_ercd(ercd, E_OK);
401 check_assert(rmtx.htskid == TASK4);
402 check_assert(rmtx.wtskid == TSK_NONE);
403
404 ercd = get_pri(TASK3, &tskpri);
405 check_ercd(ercd, E_OK);
406 check_assert(tskpri == MID_PRIORITY);
407
408 ercd = get_pri(TASK4, &tskpri);
409 check_ercd(ercd, E_OK);
410 check_assert(tskpri == MID_PRIORITY);
411
412 check_point(41);
413 ercd = chg_pri(TSK_SELF, LOW_PRIORITY);
414 check_ercd(ercd, E_OK);
415
416 check_point(44);
417 ercd = act_tsk(TASK2);
418 check_ercd(ercd, E_OK);
419
420 ercd = act_tsk(TASK3);
421 check_ercd(ercd, E_OK);
422
423 ercd = act_tsk(TASK4);
424 check_ercd(ercd, E_OK);
425
426 check_point(45);
427 ercd = chg_pri(TSK_SELF, LOW_PRIORITY);
428 check_ercd(ercd, E_OK);
429
430 check_point(50);
431 ercd = ter_tsk(TASK2);
432 check_ercd(ercd, E_OK);
433
434 check_finish(54);
435
436 check_point(0);
437}
438
439static uint_t task2_count = 0;
440
441void
442task2(intptr_t exinf)
443{
444 ER ercd;
445
446 switch (++task2_count) {
447 case 1:
448 check_point(3);
449 ercd = loc_mtx(MTX1);
450 check_ercd(ercd, E_OK);
451
452 check_point(4);
453 ercd = wup_tsk(TASK1);
454 check_ercd(ercd, E_OK);
455
456 check_point(0);
457
458 case 2:
459 check_point(9);
460 ercd = loc_mtx(MTX1);
461 check_ercd(ercd, E_OK);
462
463 check_point(10);
464 ercd = tslp_tsk(10);
465 check_ercd(ercd, E_TMOUT);
466
467 check_point(12);
468 ercd = wup_tsk(TASK1);
469 check_ercd(ercd, E_OK);
470
471 check_point(0);
472
473 case 3:
474 check_point(18);
475 ercd = loc_mtx(MTX1);
476 check_ercd(ercd, E_OK);
477
478 check_point(19);
479 ercd = slp_tsk();
480 check_ercd(ercd, E_OK);
481
482 check_point(0);
483
484 case 4:
485 check_point(27);
486 ercd = loc_mtx(MTX1);
487 check_ercd(ercd, E_OK);
488
489 ercd = loc_mtx(MTX2);
490 check_ercd(ercd, E_OK);
491
492 check_point(28);
493 ercd = wup_tsk(TASK1);
494 check_ercd(ercd, E_OK);
495
496 check_point(0);
497
498 case 5:
499 check_point(34);
500 ercd = loc_mtx(MTX1);
501 check_ercd(ercd, E_OK);
502
503 ercd = loc_mtx(MTX2);
504 check_ercd(ercd, E_OK);
505
506 check_point(35);
507 ercd = tslp_tsk(10);
508 check_ercd(ercd, E_TMOUT);
509
510 check_point(38);
511 ercd = wup_tsk(TASK1);
512 check_ercd(ercd, E_OK);
513
514 check_point(0);
515
516 case 6:
517 check_point(46);
518 ercd = loc_mtx(MTX1);
519 check_ercd(ercd, E_OK);
520
521 ercd = loc_mtx(MTX2);
522 check_ercd(ercd, E_OK);
523
524 check_point(47);
525 ercd = slp_tsk();
526 check_ercd(ercd, E_OK);
527
528 check_point(0);
529 }
530 check_point(0);
531}
532
533static uint_t task3_count = 0;
534
535void
536task3(intptr_t exinf)
537{
538 ER ercd;
539 PRI tskpri;
540 T_RMTX rmtx;
541
542 switch (++task3_count) {
543 case 1:
544 check_point(11);
545 ercd = loc_mtx(MTX1);
546 check_ercd(ercd, E_OK);
547
548 check_point(0);
549
550 case 2:
551 check_point(20);
552 ercd = loc_mtx(MTX1);
553 check_ercd(ercd, E_OK);
554
555 check_point(22);
556 ercd = ref_mtx(MTX1, &rmtx);
557 check_ercd(ercd, E_OK);
558 check_assert(rmtx.htskid == TASK3);
559 check_assert(rmtx.wtskid == TSK_NONE);
560
561 ercd = get_pri(TASK3, &tskpri);
562 check_ercd(ercd, E_OK);
563 check_assert(tskpri == MID_PRIORITY);
564
565 check_point(23);
566 ercd = ext_tsk();
567
568 check_point(0);
569
570 case 3:
571 check_point(36);
572 ercd = loc_mtx(MTX1);
573 check_ercd(ercd, E_OK);
574
575 check_point(42);
576 ercd = ext_tsk();
577
578 check_point(0);
579
580 case 4:
581 check_point(48);
582 ercd = loc_mtx(MTX1);
583 check_ercd(ercd, E_OK);
584
585 check_point(51);
586 ercd = ref_mtx(MTX1, &rmtx);
587 check_ercd(ercd, E_OK);
588 check_assert(rmtx.htskid == TASK3);
589 check_assert(rmtx.wtskid == TSK_NONE);
590
591 ercd = ref_mtx(MTX2, &rmtx);
592 check_ercd(ercd, E_OK);
593 check_assert(rmtx.htskid == TASK4);
594 check_assert(rmtx.wtskid == TSK_NONE);
595
596 ercd = get_pri(TASK3, &tskpri);
597 check_ercd(ercd, E_OK);
598 check_assert(tskpri == MID_PRIORITY);
599
600 ercd = get_pri(TASK4, &tskpri);
601 check_ercd(ercd, E_OK);
602 check_assert(tskpri == MID_PRIORITY);
603
604 check_point(52);
605 ercd = ext_tsk();
606
607 check_point(0);
608 }
609 check_point(0);
610}
611
612static uint_t task4_count = 0;
613
614void
615task4(intptr_t exinf)
616{
617 ER ercd;
618
619 switch (++task4_count) {
620 case 1:
621 check_point(37);
622 ercd = loc_mtx(MTX2);
623 check_ercd(ercd, E_OK);
624
625 check_point(43);
626 ercd = ext_tsk();
627
628 check_point(0);
629
630 case 2:
631 check_point(49);
632 ercd = loc_mtx(MTX2);
633 check_ercd(ercd, E_OK);
634
635 check_point(53);
636 ercd = ext_tsk();
637
638 check_point(0);
639 }
640 check_point(0);
641}
Note: See TracBrowser for help on using the repository browser.