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

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

ASP for EWARM のコミット.

File size: 12.1 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2007-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_mutex6.c 1696 2010-01-01 16:01:25Z ertl-hiro $
42 */
43
44/*
45 * ƒ~ƒ…
46[ƒeƒbƒNƒX‚̃eƒXƒg(6)
47 *
48 * yƒeƒXƒg‚Ì–Ú“Iz
49 *
50 * —Dæ“xãŒÀƒ~ƒ…
51[ƒeƒbƒNƒX‚ɑ΂µ‚āCƒ^ƒXƒN‚̏I—¹ŽžCƒ^ƒXƒN‚Ì—Dæ‡ˆÊ
52 * ‚̉ñ“]Žž‚̃~ƒ…
53[ƒeƒbƒNƒXŠÖ˜A‚̏ˆ—‚ð–Ô—…
54“I‚ɃeƒXƒg‚·‚éD
55 *
56 * yƒeƒXƒg€–ځz
57 *
58 * (A) ƒ^ƒXƒN‚̏I—¹Žžiext_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) ƒƒbƒN‚µ‚Ä‚¢‚½ƒ~ƒ…
66[ƒeƒbƒNƒXi•¡”j‚ª‚·‚ׂăƒbƒN‰ðœ‚³
67 * ‚ê‚邱‚ƁD
68 * (A-4) ƒƒbƒN‚µ‚Ä‚¢‚½ƒ~ƒ…
69[ƒeƒbƒNƒXi•¡”j‚ªƒƒbƒN‰ðœ‚³‚êCƒƒb
70 * ƒN‚ð‘Ò‚Á‚Ä‚¢‚½ƒ^ƒXƒNi•¡”j‚ª‚»‚ê‚ðƒƒbƒN‚µC—Dæ“x‚ª•Ï
71 * ‰»‚µC‘Ò‚¿‰ðœ‚³‚ê‚邱‚ƁD‚»‚ÌŽž‚ɁCŒã‚Ń~ƒ…
72[ƒeƒbƒNƒX‚ð
73 * ƒƒbƒN‚µ‚½ƒ^ƒXƒNiæ‚ɃƒbƒN‚µ‚Ä‚¢‚½ƒ~ƒ…
74[ƒeƒbƒNƒX‚ð‘Ò‚Á
75 * ‚Ä‚¢‚½ƒ^ƒXƒNj‚Ì•û‚ªC—Dæ‡ˆÊ‚ª‚‚­‚Ȃ邱‚ƁD
76 * (B) ƒ^ƒXƒN‚Ì—Dæ‡ˆÊ‚̉ñ“]irot_rdqj
77 * (B-1) TPRI_SELF‚ðŽw’肵‚½Žž‚ɁCƒ^ƒXƒN‚̃x[ƒX—Dæ“x‚Ì—Dæ‡ˆÊ‚ª
78 * @@@‰ñ“]‚·‚邱‚ƁD
79 * (B-2) TPRI_SELF‚ðŽw’肵‚½Žž‚ɁCƒ^ƒXƒN‚ÌŒ»Ý—Dæ“x‚Ì—Dæ‡ˆÊ‚ª‰ñ
80 * @@@“]‚µ‚È‚¢‚±‚ƁD
81 *
82 * yƒeƒXƒg€–Ú‚ÌŽÀŒ»•û–@z
83 *
84 * (A-1)
85 * ’á—Dæ“xƒ^ƒXƒNiTASK2j‚Ƀ~ƒ…
86[ƒeƒbƒNƒXiMTX1j‚ðƒƒbƒN‚³‚¹C
87 * ext_tsk‚·‚é‚ƁCƒƒbƒN‚ª‰ðœ‚³‚ê‚邱‚Æ‚ðŠm”F‚·‚éD
88 * (A-2)
89 * ’á—Dæ“xƒ^ƒXƒNiTASK2j‚ɍ‚—Dæ“xãŒÀƒ~ƒ…
90[ƒeƒbƒNƒXiMTX1j‚ðƒƒb
91 * ƒN‚³‚¹C•Ê‚Ì’á—Dæ“xƒ^ƒXƒNiTASK3j‚ÉMTX1‚ð‘Ò‚½‚¹‚½ó‘ԂŁC
92 * TASK2 ‚ªext_tsk‚·‚é‚ƁCTASK3‚ª‚—Dæ“x‚É‚È‚Á‚Ä‘Ò‚¿‰ðœ‚³‚ê‚邱
93 * ‚Æ‚ðŠm”F‚·‚éD
94 * (A-3)
95 * ’á—Dæ“xƒ^ƒXƒNiTASK2j‚Ƀ~ƒ…
96[ƒeƒbƒNƒX‚ð2‚iMTX1CMTX2jƒƒb
97 * ƒN‚³‚¹Cext_tsk‚·‚é‚ƁC—¼•û‚̃ƒbƒN‚ª‰ðœ‚³‚ê‚邱‚Æ‚ðŠm”F‚·‚éD
98 * (A-4)
99 * ’á—Dæ“xƒ^ƒXƒNiTASK2j‚ɍ‚—Dæ“xãŒÀƒ~ƒ…
100[ƒeƒbƒNƒX2‚iMTX1C
101 * MTX2j‚ð‚±‚Ì‡‚эƒbƒN‚³‚¹C•Ê‚Ì’á—Dæ“xƒ^ƒXƒN2‚iTASK3C
102 * TASK4j‚É‚»‚ꂼ‚ê‚̃ƒbƒN‚ð‘Ò‚½‚¹‚½ó‘ԂŁCTASK2‚ðext_tsk‚·‚é‚ƁC
103 * TASK3‚ÆTASK4‚ª‚—Dæ“x‚É‚È‚Á‚Ä‘Ò‚¿‰ðœ‚³‚ê‚邱‚Æ‚ðŠm”F‚·‚éD‚Ü
104 * ‚½Cæ‚ɃƒbƒN‚µ‚Ä‚¢‚½ƒ~ƒ…
105[ƒeƒbƒNƒXiMTX1j‚ð‘Ò‚Á‚Ä‚¢‚½ƒ^ƒXƒN
106 * iTASK3j‚ªCTASK4‚æ‚è‚à—Dæ‡ˆÊ‚ª‚‚­‚Ȃ邱‚Æ‚ðŠm”F‚·‚éD
107 * (B-1)
108 * ’á—Dæ“xƒ^ƒXƒN‚ª3‚iTASK2CTASK3CTASK4j‚ªŽÀs‚Å‚«‚éó‘Ô‚ÌŽž
109 * ‚ɁC1‚‚̒á—Dæ“xƒ^ƒXƒNiTASK2j‚ɍ‚—Dæ“xãŒÀƒ~ƒ…
110[ƒeƒbƒNƒX‚ð
111 * ƒƒbƒN‚³‚¹Crot_rdq(TPRI_SELF)‚·‚é‚ƁCŽc‚è‚Ì2‚‚̒á—Dæ“xƒ^ƒXƒN
112 * ‚Ì—Dæ‡ˆÊ‚ª‰ñ“]‚·‚邱‚Æ‚ðŠm”F‚·‚éD
113 * (B-2)
114 * ã‚Æ“¯‚¶ó‹µ‚ŁC‚—Dæ“xƒ^ƒXƒN‚Ì—Dæ‡ˆÊ‚ª‰ñ“]‚µ‚È‚¢‚±‚Æ‚ðŠm”F
115 * ‚·‚éD
116 *
117 * yŽg—pƒŠƒ\[ƒXz
118 *
119 * TASK1: ’á—Dæ“xƒ^ƒXƒNCƒƒCƒ“ƒ^ƒXƒNCÅ‰‚©‚ç‹N“®
120 * TASK2: ’á—Dæ“xƒ^ƒXƒN
121 * TASK3: ’á—Dæ“xƒ^ƒXƒN
122 * TASK4: ’á—Dæ“xƒ^ƒXƒN
123 * MTX1: ƒ~ƒ…
124[ƒeƒbƒNƒXiTA_CEILING‘®«CãŒÀ‚͍‚—Dæ“xj
125 * MTX2: ƒ~ƒ…
126[ƒeƒbƒNƒXiTA_CEILING‘®«CãŒÀ‚͍‚—Dæ“xj
127 *
128 * yƒeƒXƒgƒV[ƒPƒ“ƒXz
129 *
130 * == TASK1i—Dæ“xF’áj==
131 * call(set_bit_func(bit_mutex))
132 * 1: act_tsk(TASK2)
133 * 2: rot_rdq(TPRI_SELF)
134 * // ’áFTASK2¨TASK1
135 * == TASK2-1i—Dæ“xF’áj1‰ñ‚ß ==
136 * 3: loc_mtx(MTX1)
137 * // ‚FTASK2C’áFTASK1CMTX1FTASK2
138 * 4: ext_tsk() -> noreturn ... (A-1)
139 * // ’áFTASK1
140 * == TASK1i‘±‚«j==
141 * 5: ref_mtx(MTX1, &rmtx)
142 * assert(rmtx.htskid == TSK_NONE)
143 * assert(rmtx.wtskid == TSK_NONE)
144 *
145 * 6: act_tsk(TASK2)
146 * act_tsk(TASK3)
147 * 7: rot_rdq(TPRI_SELF)
148 * // ’áFTASK2¨TASK3¨TASK1
149 * == TASK2-2i—Dæ“xF’áj2‰ñ‚ß ==
150 * 8: loc_mtx(MTX1)
151 * // ‚FTASK2C’áFTASK3¨TASK1CMTX1FTASK2
152 * 9: slp_tsk()
153 * // ’áFTASK3¨TASK1CMTX1FTASK2
154 * == TASK3i—Dæ“xF’áj==
155 * 10: loc_mtx(MTX1)
156 * // ’áFTASK1CMTX1FTASK2¨TASK3
157 * == TASK1i‘±‚«j==
158 * 11: wup_tsk(TASK2)
159 * // ‚FTASK2C’áFTASK1CMTX1FTASK2¨TASK3
160 * == TASK2-2i‘±‚«j==
161 * 12: ext_tsk() -> noreturn ... (A-2)
162 * // ‚FTASK3C’áFTASK1CMTX1FTASK3
163 * == TASK3i‘±‚«j==
164 * 13: ref_mtx(MTX1, &rmtx)
165 * assert(rmtx.htskid == TASK3)
166 * assert(rmtx.wtskid == TSK_NONE)
167 * get_pri(TPRI_SELF, &tskpri)
168 * assert(tskpri == HIGH_PRIORITY)
169 * unl_mtx(MTX1)
170 * slp_tsk()
171 * // ’áFTASK1
172 *
173 * == TASK1i‘±‚«j==
174 * 14: act_tsk(TASK2)
175 * 15: rot_rdq(TPRI_SELF)
176 * // ’áFTASK2¨TASK1
177 * == TASK2-3i—Dæ“xF’áj3‰ñ‚ß ==
178 * 16: loc_mtx(MTX1)
179 * loc_mtx(MTX2)
180 * // ‚FTASK2C’áFTASK1CMTX1FTASK2CMTX2FTASK2
181 * 17: ext_tsk() -> noreturn ... (A-3)
182 * // ’áFTASK1
183 * == TASK1i‘±‚«j==
184 * 18: ref_mtx(MTX1, &rmtx)
185 * assert(rmtx.htskid == TSK_NONE)
186 * assert(rmtx.wtskid == TSK_NONE)
187 * ref_mtx(MTX2, &rmtx)
188 * assert(rmtx.htskid == TSK_NONE)
189 * assert(rmtx.wtskid == TSK_NONE)
190 *
191 * 19: act_tsk(TASK2)
192 * wup_tsk(TASK3)
193 * act_tsk(TASK4)
194 * 20: rot_rdq(TPRI_SELF)
195 * // ’áFTASK2¨TASK3¨TASK4¨TASK1
196 * == TASK2-4i—Dæ“xF’áj4‰ñ‚ß ==
197 * 21: loc_mtx(MTX1)
198 * loc_mtx(MTX2)
199 * // ‚FTASK2C’áFTASK3¨TASK4¨TASK1CMTX1FTASK2CMTX2FTASK2
200 * 22: chg_pri(TASK1, HIGH_PRIORITY)
201 * // ‚FTASK2¨TASK1C’áFTASK3¨TASK4CMTX1FTASK2CMTX2FTASK2
202 * 23: rot_rdq(TPRI_SELF) ... (B-1)(B-2)
203 * // ‚FTASK2¨TASK1C’áFTASK4¨TASK3CMTX1FTASK2CMTX2FTASK2
204 * 24: slp_tsk()
205 * // ‚FTASK1C’áFTASK4¨TASK3CMTX1FTASK2CMTX2FTASK2
206 * == TASK1i‘±‚«j==
207 * 25: chg_pri(TSK_SELF, TPRI_INI)
208 * // ’áFTASK4¨TASK3¨TASK1CMTX1FTASK2CMTX2FTASK2
209 * == TASK4i—Dæ“xF’áj==
210 * 26: loc_mtx(MTX2)
211 * // ’áFTASK3¨TASK1CMTX1FTASK2CMTX2FTASK2¨TASK4
212 * == TASK3i‘±‚«j==
213 * 27: loc_mtx(MTX1)
214 * // ’áFTASK1CMTX1FTASK2¨TASK3CMTX2FTASK2¨TASK4
215 * == TASK1i‘±‚«j==
216 * 28: wup_tsk(TASK2)
217 * // ‚FTASK2C’áFTASK1CMTX1FTASK2¨TASK3CMTX2FTASK2¨TASK4
218 * == TASK2-4i‘±‚«j==
219 * 29: ext_tsk() -> noreturn ... (A-4)
220 * // ‚FTASK3¨TASK4C’áFTASK1CMTX1FTASK3CMTX2FTASK4
221 * == TASK3i‘±‚«j==
222 * 30: ref_mtx(MTX1, &rmtx)
223 * assert(rmtx.htskid == TASK3)
224 * assert(rmtx.wtskid == TSK_NONE)
225 * ref_mtx(MTX2, &rmtx)
226 * assert(rmtx.htskid == TASK4)
227 * assert(rmtx.wtskid == TSK_NONE)
228 * get_pri(TPRI_SELF, &tskpri)
229 * assert(tskpri == HIGH_PRIORITY)
230 * ext_tsk() -> noreturn
231 * // ‚FTASK4C’áFTASK1CMTX2FTASK4
232 * == TASK4i‘±‚«j==
233 * 31: get_pri(TPRI_SELF, &tskpri)
234 * assert(tskpri == HIGH_PRIORITY)
235 * ext_tsk() -> noreturn
236 * // ’áFTASK1
237 * == TASK1i‘±‚«j==
238 * 32: END
239 */
240
241#include <kernel.h>
242#include <t_syslog.h>
243#include "syssvc/logtask.h"
244#include "kernel_cfg.h"
245#include "test_lib.h"
246#include "test_mutex6.h"
247
248extern ER bit_mutex(void);
249
250void
251task1(intptr_t exinf)
252{
253 ER ercd;
254 T_RMTX rmtx;
255
256 set_bit_func(bit_mutex);
257
258 check_point(1);
259 ercd = act_tsk(TASK2);
260 check_ercd(ercd, E_OK);
261
262 check_point(2);
263 ercd = rot_rdq(TPRI_SELF);
264 check_ercd(ercd, E_OK);
265
266 check_point(5);
267 ercd = ref_mtx(MTX1, &rmtx);
268 check_ercd(ercd, E_OK);
269 check_assert(rmtx.htskid == TSK_NONE);
270 check_assert(rmtx.wtskid == TSK_NONE);
271
272 check_point(6);
273 ercd = act_tsk(TASK2);
274 check_ercd(ercd, E_OK);
275
276 ercd = act_tsk(TASK3);
277 check_ercd(ercd, E_OK);
278
279 check_point(7);
280 ercd = rot_rdq(TPRI_SELF);
281 check_ercd(ercd, E_OK);
282
283 check_point(11);
284 ercd = wup_tsk(TASK2);
285 check_ercd(ercd, E_OK);
286
287 check_point(14);
288 ercd = act_tsk(TASK2);
289 check_ercd(ercd, E_OK);
290
291 check_point(15);
292 ercd = rot_rdq(TPRI_SELF);
293 check_ercd(ercd, E_OK);
294
295 check_point(18);
296 ercd = ref_mtx(MTX1, &rmtx);
297 check_ercd(ercd, E_OK);
298 check_assert(rmtx.htskid == TSK_NONE);
299 check_assert(rmtx.wtskid == TSK_NONE);
300
301 ercd = ref_mtx(MTX2, &rmtx);
302 check_ercd(ercd, E_OK);
303 check_assert(rmtx.htskid == TSK_NONE);
304 check_assert(rmtx.wtskid == TSK_NONE);
305
306 check_point(19);
307 ercd = act_tsk(TASK2);
308 check_ercd(ercd, E_OK);
309
310 ercd = wup_tsk(TASK3);
311 check_ercd(ercd, E_OK);
312
313 ercd = act_tsk(TASK4);
314 check_ercd(ercd, E_OK);
315
316 check_point(20);
317 ercd = rot_rdq(TPRI_SELF);
318 check_ercd(ercd, E_OK);
319
320 check_point(25);
321 ercd = chg_pri(TSK_SELF, TPRI_INI);
322 check_ercd(ercd, E_OK);
323
324 check_point(28);
325 ercd = wup_tsk(TASK2);
326 check_ercd(ercd, E_OK);
327
328 check_finish(32);
329
330 check_point(0);
331}
332
333static uint_t task2_count = 0;
334
335void
336task2(intptr_t exinf)
337{
338 ER ercd;
339
340 switch (++task2_count) {
341 case 1:
342 check_point(3);
343 ercd = loc_mtx(MTX1);
344 check_ercd(ercd, E_OK);
345
346 check_point(4);
347 ercd = ext_tsk();
348
349 check_point(0);
350
351 case 2:
352 check_point(8);
353 ercd = loc_mtx(MTX1);
354 check_ercd(ercd, E_OK);
355
356 check_point(9);
357 ercd = slp_tsk();
358 check_ercd(ercd, E_OK);
359
360 check_point(12);
361 ercd = ext_tsk();
362
363 check_point(0);
364
365 case 3:
366 check_point(16);
367 ercd = loc_mtx(MTX1);
368 check_ercd(ercd, E_OK);
369
370 ercd = loc_mtx(MTX2);
371 check_ercd(ercd, E_OK);
372
373 check_point(17);
374 ercd = ext_tsk();
375
376 check_point(0);
377
378 case 4:
379 check_point(21);
380 ercd = loc_mtx(MTX1);
381 check_ercd(ercd, E_OK);
382
383 ercd = loc_mtx(MTX2);
384 check_ercd(ercd, E_OK);
385
386 check_point(22);
387 ercd = chg_pri(TASK1, HIGH_PRIORITY);
388 check_ercd(ercd, E_OK);
389
390 check_point(23);
391 ercd = rot_rdq(TPRI_SELF);
392 check_ercd(ercd, E_OK);
393
394 check_point(24);
395 ercd = slp_tsk();
396 check_ercd(ercd, E_OK);
397
398 check_point(29);
399 ercd = ext_tsk();
400
401 check_point(0);
402 }
403 check_point(0);
404}
405
406void
407task3(intptr_t exinf)
408{
409 ER ercd;
410 PRI tskpri;
411 T_RMTX rmtx;
412
413 check_point(10);
414 ercd = loc_mtx(MTX1);
415 check_ercd(ercd, E_OK);
416
417 check_point(13);
418 ercd = ref_mtx(MTX1, &rmtx);
419 check_ercd(ercd, E_OK);
420 check_assert(rmtx.htskid == TASK3);
421 check_assert(rmtx.wtskid == TSK_NONE);
422
423 ercd = get_pri(TPRI_SELF, &tskpri);
424 check_ercd(ercd, E_OK);
425 check_assert(tskpri == HIGH_PRIORITY);
426
427 ercd = unl_mtx(MTX1);
428 check_ercd(ercd, E_OK);
429
430 ercd = slp_tsk();
431 check_ercd(ercd, E_OK);
432
433 check_point(27);
434 ercd = loc_mtx(MTX1);
435 check_ercd(ercd, E_OK);
436
437 check_point(30);
438 ercd = ref_mtx(MTX1, &rmtx);
439 check_ercd(ercd, E_OK);
440 check_assert(rmtx.htskid == TASK3);
441 check_assert(rmtx.wtskid == TSK_NONE);
442
443 ercd = ref_mtx(MTX2, &rmtx);
444 check_ercd(ercd, E_OK);
445 check_assert(rmtx.htskid == TASK4);
446 check_assert(rmtx.wtskid == TSK_NONE);
447
448 ercd = get_pri(TPRI_SELF, &tskpri);
449 check_ercd(ercd, E_OK);
450 check_assert(tskpri == HIGH_PRIORITY);
451
452 ercd = ext_tsk();
453
454 check_point(0);
455}
456
457void
458task4(intptr_t exinf)
459{
460 ER ercd;
461 PRI tskpri;
462
463 check_point(26);
464 ercd = loc_mtx(MTX2);
465 check_ercd(ercd, E_OK);
466
467 check_point(31);
468 ercd = get_pri(TPRI_SELF, &tskpri);
469 check_ercd(ercd, E_OK);
470 check_assert(tskpri == HIGH_PRIORITY);
471
472 ercd = ext_tsk();
473
474 check_point(0);
475}
Note: See TracBrowser for help on using the repository browser.