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

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

ASP for EWARM のコミット.

File size: 19.8 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_mutex4.c 1696 2010-01-01 16:01:25Z ertl-hiro $
42 */
43
44/*
45 * ƒ~ƒ…
46[ƒeƒbƒNƒX‚̃eƒXƒg(4)
47 *
48 * yƒeƒXƒg‚Ì–Ú“Iz
49 *
50 * —Dæ“xãŒÀƒ~ƒ…
51[ƒeƒbƒNƒX‚ɑ΂µ‚āCloc_mtx‚Æunl_mtx‚É”º‚¤—Dæ“x‚Ì•Ï
52 * Xˆ—‚ð–Ô—…
53“I‚ɃeƒXƒg‚·‚éD‚½‚¾‚µCchange_priority‚Æ
54 * mutex_calc_priority‚Ì“à—e‚É‚Í“¥‚ݍž‚Ü‚È‚¢D
55 *
56 * yƒeƒXƒg€–ځz
57 *
58 * (A) ƒ~ƒ…
59[ƒeƒbƒNƒX‚̃ƒbƒNˆ—iloc_mtxj‚É”º‚¤—Dæ“x•ÏX
60 * (A-1) ƒƒbƒN‚µ‚½ƒ~ƒ…
61[ƒeƒbƒNƒX‚Ì—Dæ“xãŒÀ‚ªŽ©ƒ^ƒXƒN‚ÌŒ»Ý—Dæ
62 * “x‚æ‚è‚à‚‚¢ê‡‚ɁCŽ©ƒ^ƒXƒN‚Ì—Dæ“x‚ª‚»‚Ì—Dæ“xãŒÀ‚Ü‚Å
63 * ã‚ª‚邱‚ƁD‚Ü‚½C“¯‚¶—Dæ“x“à‚Å‚Ì—Dæ‡ˆÊ‚ªÅ‚‚ɂȂ邱
64 * ‚Æ
65 * (A-2) ƒƒbƒN‚µ‚½ƒ~ƒ…
66[ƒeƒbƒNƒX‚Ì—Dæ“xãŒÀ‚ªŽ©ƒ^ƒXƒN‚ÌŒ»Ý—Dæ
67 * “x‚Æ“¯‚¶ê‡‚ɁCŽ©ƒ^ƒXƒN‚Ì—Dæ“x‚ª•Ï‚í‚ç‚È‚¢‚±‚ƁD‚Ü‚½C
68 * “¯‚¶—Dæ“x“à‚Å‚Ì—Dæ‡ˆÊ‚ª•Ï‚í‚ç‚È‚¢‚±‚Æ
69 * (A-3) ƒƒbƒN‚µ‚½ƒ~ƒ…
70[ƒeƒbƒNƒX‚Ì—Dæ“xãŒÀ‚ªŽ©ƒ^ƒXƒN‚ÌŒ»Ý—Dæ
71 * “x‚æ‚è‚à’á‚¢ê‡‚ɁCŽ©ƒ^ƒXƒN‚Ì—Dæ“x‚ª•Ï‚í‚ç‚È‚¢‚±‚ƁD‚Ü
72 * ‚½C“¯‚¶—Dæ“x“à‚Å‚Ì—Dæ‡ˆÊ‚ª•Ï‚í‚ç‚È‚¢‚±‚Æ
73 * (B) ƒ~ƒ…
74[ƒeƒbƒNƒX‚̃ƒbƒN‰ðœˆ—iunl_mtxj‚É”º‚¤ƒƒbƒN‰ðœ‚µ‚½
75 * ƒ^ƒXƒN‚Ì—Dæ“x•ÏX
76 * (B-1) ƒƒbƒN‰ðœ‚µ‚½ƒ~ƒ…
77[ƒeƒbƒNƒX‚̏ãŒÀ—Dæ“x‚ªŽ©ƒ^ƒXƒN‚ÌŒ»Ý
78 * —Dæ“x‚Æ“¯‚¶‚ŁCƒ~ƒ…
79[ƒeƒbƒNƒX‚̃ƒbƒN‰ðœ‚Å—Dæ“x‚ª‰º‚ª
80 * ‚é‚ׂ«ê‡‚ɁCŽ©ƒ^ƒXƒN‚Ì—Dæ“x‚ª“KØ‚ɉº‚°‚ç‚ê‚邱‚ƁD‚Ü
81 * ‚½C“¯‚¶—Dæ“x“à‚Å‚Ì—Dæ‡ˆÊ‚ªÅ‚‚ɂȂ邱‚Æ
82 * (B-2) ƒƒbƒN‰ðœ‚µ‚½ƒ~ƒ…
83[ƒeƒbƒNƒX‚̏ãŒÀ—Dæ“x‚ªŽ©ƒ^ƒXƒN‚ÌŒ»Ý
84 * —Dæ“x‚Æ“¯‚¶‚ŁCƒ~ƒ…
85[ƒeƒbƒNƒX‚̃ƒbƒN‰ðœ‚Å—Dæ“x‚ª•Ï‚í
86 * ‚é‚ׂ«‚Å‚È‚¢ê‡‚ɁCŽ©ƒ^ƒXƒN‚Ì—Dæ“x‚ª•Ï‚í‚ç‚È‚¢‚±‚ƁD‚Ü
87 * ‚½C“¯‚¶—Dæ“x“à‚Å‚Ì—Dæ‡ˆÊ‚ª•Ï‚í‚ç‚È‚¢‚±‚Æ
88 * (B-3) ƒƒbƒN‰ðœ‚µ‚½ƒ~ƒ…
89[ƒeƒbƒNƒX‚̏ãŒÀ—Dæ“x‚ªŽ©ƒ^ƒXƒN‚ÌŒ»Ý
90 * —Dæ“x‚æ‚è‚à’á‚¢ê‡‚ɁCŽ©ƒ^ƒXƒN‚Ì—Dæ“x‚ª•Ï‚í‚ç‚È‚¢‚±‚ƁD
91 * ‚Ü‚½C“¯‚¶—Dæ“x“à‚Å‚Ì—Dæ‡ˆÊ‚ª•Ï‚í‚ç‚È‚¢‚±‚Æ
92 * (C) ƒ~ƒ…
93[ƒeƒbƒNƒX‚̃ƒbƒN‰ðœˆ—iunl_mtxj‚É”º‚¢ƒ~ƒ…
94[ƒeƒbƒNƒX‚ð
95 * ƒƒbƒN‚µ‚½ƒ^ƒXƒN‚Ì—Dæ“x•ÏX
96 * (C-1) ƒ~ƒ…
97[ƒeƒbƒNƒX‚Ì—Dæ“xãŒÀ‚ªV‚½‚Ƀ~ƒ…
98[ƒeƒbƒNƒX‚ðƒƒbƒN
99 * ‚µ‚½ƒ^ƒXƒN‚ÌŒ»Ý—Dæ“x‚æ‚è‚à‚‚¢ê‡‚ɁC“–ŠYƒ^ƒXƒN‚Ì—Dæ
100 * “x‚ª‚»‚Ì—Dæ“xãŒÀ‚܂ŏオ‚邱‚ƁD‚Ü‚½C“¯‚¶—Dæ“x“à‚Å‚Ì
101 * —Dæ‡ˆÊ‚ªÅ’á‚ɂȂ邱‚Æ
102 * (C-2) ƒ~ƒ…
103[ƒeƒbƒNƒX‚Ì—Dæ“xãŒÀ‚ªV‚½‚Ƀ~ƒ…
104[ƒeƒbƒNƒX‚ðƒƒbƒN
105 * ‚µ‚½ƒ^ƒXƒN‚ÌŒ»Ý—Dæ“x‚Æ“¯‚¶ê‡‚ɁC“–ŠYƒ^ƒXƒN‚Ì—Dæ“x‚ª
106 * •Ï‚í‚ç‚È‚¢‚±‚ƁD‚Ü‚½C“¯‚¶—Dæ“x“à‚Å‚Ì—Dæ‡ˆÊ‚ªÅ’á‚É‚È
107 * ‚邱‚Æ
108 * (C-3) ƒ~ƒ…
109[ƒeƒbƒNƒX‚Ì—Dæ“xãŒÀ‚ªV‚½‚Ƀ~ƒ…
110[ƒeƒbƒNƒX‚ðƒƒbƒN
111 * ‚µ‚½ƒ^ƒXƒN‚ÌŒ»Ý—Dæ“x‚æ‚è‚à’á‚¢ê‡‚ɁC“–ŠYƒ^ƒXƒN‚Ì—Dæ
112 * “x‚ª•Ï‚í‚ç‚È‚¢‚±‚ƁD‚Ü‚½C“¯‚¶—Dæ“x“à‚Å‚Ì—Dæ‡ˆÊ‚ªÅ’á
113 * ‚ɂȂ邱‚Æ
114 * (D) ƒ~ƒ…
115[ƒeƒbƒNƒX‚̃ƒbƒNˆ—iloc_mtxj‚ÌE_ILUSEƒGƒ‰[
116 * (D-1) Ž©ƒ^ƒXƒN‚̃x[ƒX—Dæ“x‚ªCƒƒbƒN‚µ‚悤‚Æ‚µ‚½ƒ~ƒ…
117[ƒeƒbƒN
118 * ƒX‚̏ãŒÀ—Dæ“x‚æ‚è‚à‚‚¢ŽžCE_ILUSEƒGƒ‰[‚ɂȂ邱‚Æ
119 * (D-2) Ž©ƒ^ƒXƒN‚̃x[ƒX—Dæ“x‚ªCƒƒbƒN‚µ‚悤‚Æ‚µ‚½ƒ~ƒ…
120[ƒeƒbƒN
121 * ƒX‚̏ãŒÀ—Dæ“x‚Æ“¯‚¶‚©‚»‚ê‚æ‚è’Ⴏ‚ê‚΁CŽ©ƒ^ƒXƒN‚ÌŒ»Ý—D
122 * æ“x‚ª‚»‚ê‚æ‚荂‚­‚Ä‚àCE_ILUSEƒGƒ‰[‚É‚È‚ç‚È‚¢‚±‚Æ
123 *
124 * yƒeƒXƒg€–Ú‚ÌŽÀŒ»•û–@z
125 *
126 * (A-1)
127 * ’†—Dæ“xƒ^ƒXƒNiTASK1j‚ɁC‚—Dæ“xãŒÀƒ~ƒ…
128[ƒeƒbƒNƒXiMTX2j‚ð
129 * ƒƒbƒN‚³‚¹C‚—Dæ“x‚ɂȂ邱‚Æ‚ðŠm”F‚·‚éD‚Ü‚½CŽÀs‰Â”\ó‘Ô‚Ì
130 * ‚—Dæ“xƒ^ƒXƒNiTASK4j‚æ‚è‚àC—Dæ‡ˆÊ‚ª‚‚­‚Ȃ邱‚Æ‚ðŠm”F‚·‚éD
131 * ƒfƒBƒXƒpƒbƒ`‹ÖŽ~ó‘Ô‚ÅŽÀŽ{‚·‚éD
132 * (A-2)
133 * ’†—Dæ“xƒ^ƒXƒNiTASK1j‚ɁC’†—Dæ“xãŒÀƒ~ƒ…
134[ƒeƒbƒNƒXiMTX1j‚ð
135 * ƒƒbƒN‚³‚¹C—Dæ“x‚ª•Ï‚í‚ç‚È‚¢‚±‚Æ‚ðŠm”F‚·‚éD‚Ü‚½CŽÀs‰Â”\ó
136 * ‘Ô‚Ì’†—Dæ“xƒ^ƒXƒN‚ð2‚iTASK2CTASK3j‚ð—pˆÓ‚µ‚Ä‚¨‚«C—Dæ‡ˆÊ
137 * ‚ª•Ï‚í‚ç‚È‚¢‚±‚Æ‚ðŠm”F‚·‚éDƒfƒBƒXƒpƒbƒ`‹ÖŽ~ó‘Ô‚ÅŽÀŽ{‚·‚éD
138 * (A-3)
139 * ’†—Dæ“xƒ^ƒXƒNiTASK1j‚ª‚—Dæ“xãŒÀƒ~ƒ…
140[ƒeƒbƒNƒXiMTX2j‚ðƒƒb
141 * ƒN‚µ‚č‚—Dæ“x‚É‚È‚Á‚Ä‚¢‚éó‘ԂŁC’†—Dæ“xãŒÀƒ~ƒ…
142[ƒeƒbƒNƒX
143 * iMTX1j‚ðƒƒbƒN‚³‚¹C—Dæ“x‚ª•Ï‚í‚ç‚È‚¢‚±‚Æ‚ðŠm”F‚·‚éD‚Ü‚½C
144 * ŽÀs‰Â”\ó‘Ԃ̍‚—Dæ“xƒ^ƒXƒN‚ð2‚iTASK4CTASK5j‚ð—pˆÓ‚µ‚Ä‚¨‚«C
145 * —Dæ‡ˆÊ‚ª•Ï‚í‚ç‚È‚¢‚±‚Æ‚ðŠm”F‚·‚éDƒfƒBƒXƒpƒbƒ`‹ÖŽ~ó‘Ô‚ÅŽÀŽ{
146 * ‚·‚éD
147 * (B-1)
148 * ’†—Dæ“xƒ^ƒXƒNiTASK1j‚ɍ‚—Dæ“xãŒÀƒ~ƒ…
149[ƒeƒbƒNƒXiMTX2j‚Ì‚Ý
150 * ‚ðƒƒbƒN‚³‚¹‚Ä‚¢‚éó‘ԂŁC‚»‚ê‚ðƒƒbƒN‰ðœ‚³‚¹C’†—Dæ“x‚É‚È‚é
151 * ‚±‚Æ‚ðŠm”F‚·‚éD‚Ü‚½CŽÀs‰Â”\ó‘Ô‚Ì’†—Dæ“xƒ^ƒXƒNiTASK2j‚æ‚è
152 * ‚àC—Dæ‡ˆÊ‚ª‚‚­‚Ȃ邱‚Æ‚ðŠm”F‚·‚éD
153 * (B-2)
154 * ’†—Dæ“xƒ^ƒXƒNiTASK1j‚É’†—Dæ“xãŒÀƒ~ƒ…
155[ƒeƒbƒNƒXiMTX1j‚Ì‚Ý
156 * ‚ðƒƒbƒN‚³‚¹‚Ä‚¢‚éó‘ԂŁC‚»‚ê‚ðƒƒbƒN‰ðœ‚³‚¹C—Dæ“x‚ª•Ï‚í‚ç
157 * ‚È‚¢‚±‚Æ‚ðŠm”F‚·‚éD‚Ü‚½CŽÀs‰Â”\ó‘Ô‚Ì’†—Dæ“xƒ^ƒXƒN‚ð2‚Â
158 * iTASK2CTASK3j‚ð—pˆÓ‚µ‚Ä‚¨‚«C—Dæ‡ˆÊ‚ª•Ï‚í‚ç‚È‚¢‚±‚Æ‚ðŠm”F
159 * ‚·‚éDƒfƒBƒXƒpƒbƒ`‹ÖŽ~ó‘Ô‚ÅŽÀŽ{‚·‚éD
160 * (B-3)
161 * ’†—Dæ“xƒ^ƒXƒNiTASK1j‚ɍ‚—Dæ“xãŒÀƒ~ƒ…
162[ƒeƒbƒNƒXiMTX2j‚Æ’†
163 * —Dæ“xãŒÀƒ~ƒ…
164[ƒeƒbƒNƒXiMTX1j‚ðƒƒbƒN‚³‚¹‚Ä‚¢‚éó‘ԂŁC’†—D
165 * æ“xãŒÀƒ~ƒ…
166[ƒeƒbƒNƒXiMTX1j‚ðƒƒbƒN‰ðœ‚³‚¹C—Dæ“x‚ª•Ï‚í‚ç
167 * ‚È‚¢‚±‚Æ‚ðŠm”F‚·‚éD‚Ü‚½CŽÀs‰Â”\ó‘Ԃ̍‚—Dæ“xƒ^ƒXƒN‚ð2‚Â
168 * iTASK4CTASK5j‚ð—pˆÓ‚µ‚Ä‚¨‚«C—Dæ‡ˆÊ‚ª•Ï‚í‚ç‚È‚¢‚±‚Æ‚ðŠm”F
169 * ‚·‚éDƒfƒBƒXƒpƒbƒ`‹ÖŽ~ó‘Ô‚ÅŽÀŽ{‚·‚éD
170 * (C-1)
171 * ’†—Dæ“xƒ^ƒXƒNiTASK1j‚ɍ‚—Dæ“xãŒÀƒ~ƒ…
172[ƒeƒbƒNƒX‚ð2‚iMTX2C
173 * MTX3jƒƒbƒN‚³‚¹C•Ê‚Ì’†—Dæ“xƒ^ƒXƒNiTASK2j‚ªMTX2‚ð‘Ò‚Á‚Ä‚¢‚é
174 * ó‘ԂŁCTASK1‚ÉMTX2‚ðƒƒbƒN‰ðœ‚³‚¹CTASK2‚Ì—Dæ“x‚ª‚—Dæ“x‚É
175 * ‚Ȃ邱‚Æ‚ðŠm”F‚·‚éD‚Ü‚½CTASK2‚Ì—Dæ‡ˆÊ‚ªCTASK1‚æ‚è‚à’á‚­‚È
176 * ‚邱‚Æ‚ðŠm”F‚·‚éD
177 * (C-2)
178 * ’†—Dæ“xƒ^ƒXƒNiTASK2j‚É’†—Dæ“xãŒÀƒ~ƒ…
179[ƒeƒbƒNƒXiMTX1j‚ðƒƒb
180 * ƒN‚³‚¹C•Ê‚Ì’†—Dæ“xƒ^ƒXƒNiTASK1j‚ªMTX1‚ð‘Ò‚Á‚Ä‚¢‚éó‘ԂŁC
181 * TASK2‚ÉMTX1‚ðƒƒbƒN‰ðœ‚³‚¹CTASK1‚Ì—Dæ“x‚ª’†—Dæ“x‚̂܂ܕω»
182 * ‚µ‚È‚¢‚±‚Æ‚ðŠm”F‚·‚éD‚Ü‚½CŽÀs‰Â”\ó‘Ô‚Ì’†—Dæ“xƒ^ƒXƒN‚ð‚à‚¤
183 * 1‚iTASK3j—pˆÓ‚µ‚Ä‚¨‚«CTASK1‚Ì—Dæ‡ˆÊ‚ªTASK3‚æ‚è‚à’á‚­‚È‚é
184 * ‚±‚Æ‚ðŠm”F‚·‚éD
185 * (C-3)
186 * ’†—Dæ“xƒ^ƒXƒNiTASK1j‚É’†—Dæ“xãŒÀƒ~ƒ…
187[ƒeƒbƒNƒXiMTX1j‚ƍ‚
188 * —Dæ“xãŒÀƒ~ƒ…
189[ƒeƒbƒNƒXiMTX3j‚ðƒƒbƒN‚³‚¹C•Ê‚Ì’†—Dæ“xƒ^ƒX
190 * ƒNiTASK2j‚ª•Ê‚̍‚—Dæ“xãŒÀƒ~ƒ…
191[ƒeƒbƒNƒXiMTX2j‚ðƒƒbƒN‚µ‚Ä
192 * MTX1‚ð‘Ò‚Á‚Ä‚¢‚éó‘ԂŁCTASK1‚ÉMTX1‚ðƒƒbƒN‰ðœ‚³‚¹CTASK2‚Ì—D
193 * æ“x‚ª‚—Dæ“x‚̂܂ܕω»‚µ‚È‚¢‚±‚Æ‚ðŠm”F‚·‚éD‚Ü‚½CTASK2‚Ì—Dæ
194 * ‡ˆÊ‚ªCTASK1‚æ‚è‚à’á‚­‚Ȃ邱‚Æ‚ðŠm”F‚·‚éD
195 * (D-1)
196 * ‚—Dæ“xƒ^ƒXƒNiTASK4j‚ɁC’†—Dæ“xãŒÀƒ~ƒ…
197[ƒeƒbƒNƒXiMTX1j‚ð
198 * ƒƒbƒN‚³‚¹CE_ILUSEƒGƒ‰[‚ɂȂ邱‚Æ‚ðŠm”F‚·‚éD
199 * (D-2)
200 * ’†—Dæ“xƒ^ƒXƒNiTASK1j‚ª‚—Dæ“xãŒÀƒ~ƒ…
201[ƒeƒbƒNƒXiMTX2j‚ðƒƒb
202 * ƒN‚µ‚č‚—Dæ“x‚É‚È‚Á‚Ä‚¢‚éó‘ԂŁC’†—Dæ“xãŒÀƒ~ƒ…
203[ƒeƒbƒNƒX
204 * iMTX1j‚ðƒƒbƒN‚³‚¹CE_ILUSEƒGƒ‰[‚É‚È‚é‚È‚¢‚±‚Æ‚ðŠm”F‚·‚éD
205 *
206 * yŽg—pƒŠƒ\[ƒXz
207 *
208 * TASK1: ’†—Dæ“xƒ^ƒXƒNCƒƒCƒ“ƒ^ƒXƒNCÅ‰‚©‚ç‹N“®
209 * TASK2: ’†—Dæ“xƒ^ƒXƒN
210 * TASK3: ’†—Dæ“xƒ^ƒXƒN
211 * TASK4: ‚—Dæ“xƒ^ƒXƒN
212 * TASK5: ‚—Dæ“xƒ^ƒXƒN
213 * MTX1: ƒ~ƒ…
214[ƒeƒbƒNƒXiTA_CEILING‘®«CãŒÀ‚Í’†—Dæ“xj
215 * MTX2: ƒ~ƒ…
216[ƒeƒbƒNƒXiTA_CEILING‘®«CãŒÀ‚͍‚—Dæ“xj
217 * MTX3: ƒ~ƒ…
218[ƒeƒbƒNƒXiTA_CEILING‘®«CãŒÀ‚͍‚—Dæ“xj
219 *
220 * yƒeƒXƒgƒV[ƒPƒ“ƒXz
221 *
222 * == TASK1i—Dæ“xF’†j==
223 * call(set_bit_func(bit_mutex))
224 * 1: dis_dsp()
225 * 2: act_tsk(TASK2)
226 * act_tsk(TASK4)
227 * // ‚FTASK4C’†FTASK1¨TASK2
228 * 3: ploc_mtx(MTX2) ... (A-1)
229 * // ‚FTASK1¨TASK4C’†FTASK2CMTX2FTASK1
230 * get_pri(TSK_SELF, &tskpri)
231 * assert(tskpri == HIGH_PRIORITY)
232 * 4: ena_dsp()
233 * 5: unl_mtx(MTX2) ... (B-1)
234 * // ‚FTASK4C’†FTASK1¨TASK2
235 * == TASK4i—Dæ“xF‚j==
236 * 6: loc_mtx(MTX1) -> E_ILUSE ... (D-1)
237 * 7: slp_tsk()
238 * // ’†FTASK1¨TASK2
239 * == TASK1i‘±‚«j==
240 * 8: get_pri(TSK_SELF, &tskpri)
241 * assert(tskpri == MID_PRIORITY)
242 *
243 * 9: dis_dsp()
244 * 10: rot_rdq(MID_PRIORITY)
245 * // ’†FTASK2¨TASK1
246 * 11: act_tsk(TASK3)
247 * // ’†FTASK2¨TASK1¨TASK3
248 * 12: ploc_mtx(MTX1) ... (A-2)
249 * // ’†FTASK2¨TASK1¨TASK3CMTX1FTASK1
250 * get_pri(TSK_SELF, &tskpri)
251 * assert(tskpri == MID_PRIORITY)
252 * 13: ena_dsp()
253 * == TASK2i—Dæ“xF’†j==
254 * 14: slp_tsk()
255 * // ’†FTASK1¨TASK3CMTX1FTASK1
256 * == TASK1i‘±‚«j==
257 * 15: slp_tsk()
258 * // ’†FTASK3CMTX1FTASK1
259 * == TASK3i—Dæ“xF’†j==
260 * 16: wup_tsk(TASK1)
261 * // ’†FTASK3¨TASK1CMTX1FTASK1
262 * 17: slp_tsk()
263 * // ’†FTASK1CMTX1FTASK1
264 *
265 * == TASK1i‘±‚«j==
266 * 18: wup_tsk(TASK2)
267 * // ’†FTASK1¨TASK2CMTX1FTASK1
268 * 19: dis_dsp()
269 * 20: rot_rdq(MID_PRIORITY)
270 * // ’†FTASK2¨TASK1CMTX1FTASK1
271 * 21: wup_tsk(TASK3)
272 * // ’†FTASK2¨TASK1¨TASK3CMTX1FTASK1
273 * 22: unl_mtx(MTX1) ... (B-2)
274 * // ’†FTASK2¨TASK1¨TASK3
275 * get_pri(TSK_SELF, &tskpri)
276 * assert(tskpri == MID_PRIORITY)
277 * 23: ena_dsp()
278 * == TASK2i—Dæ“xF’†j==
279 * 24: slp_tsk()
280 * // ’†FTASK1¨TASK3
281 * == TASK1i‘±‚«j==
282 * 25: slp_tsk()
283 * // ’†FTASK3
284 * == TASK3i—Dæ“xF’†j==
285 * 26: wup_tsk(TASK1)
286 * // ’†FTASK3¨TASK1
287 * 27: slp_tsk()
288 * // ’†FTASK1
289 *
290 * == TASK1i‘±‚«j==
291 * 28: dis_dsp()
292 * 29: wup_tsk(TASK4)
293 * // ‚FTASK4C’†FTASK1
294 * 30: ploc_mtx(MTX2)
295 * // ‚FTASK1¨TASK4CMTX2FTASK1
296 * 31: rot_rdq(HIGH_PRIORITY)
297 * // ‚FTASK4¨TASK1CMTX2FTASK1
298 * 32: act_tsk(TASK5)
299 * // ‚FTASK4¨TASK1¨TASK5CMTX2FTASK1
300 * 33: ploc_mtx(MTX1) ... (A-3)(D-2)
301 * // ‚FTASK4¨TASK1¨TASK5CMTX2FTASK1CMTX1FTASK1
302 * get_pri(TSK_SELF, &tskpri)
303 * assert(tskpri == HIGH_PRIORITY)
304 * 34: ena_dsp()
305 * == TASK4i‘±‚«j==
306 * 35: slp_tsk()
307 * // ‚FTASK1¨TASK5CMTX2FTASK1CMTX1FTASK1
308 * == TASK1i‘±‚«j==
309 * 36: slp_tsk()
310 * // ‚FTASK5CMTX2FTASK1CMTX1FTASK1
311 * == TASK5i—Dæ“xF‚j==
312 * 37: wup_tsk(TASK1)
313 * // ‚FTASK5¨TASK1CMTX2FTASK1CMTX1FTASK1
314 * 38: slp_tsk()
315 * // ‚FTASK1CMTX2FTASK1CMTX1FTASK1
316 *
317 * == TASK1i‘±‚«j==
318 * 39: dis_dsp()
319 * 40: wup_tsk(TASK4)
320 * // ‚FTASK1¨TASK4CMTX2FTASK1CMTX1FTASK1
321 * 41: rot_rdq(HIGH_PRIORITY)
322 * // ‚FTASK4¨TASK1CMTX2FTASK1CMTX1FTASK1
323 * 42: wup_tsk(TASK5)
324 * // ‚FTASK4¨TASK1¨TASK5CMTX2FTASK1CMTX1FTASK1
325 * 43: unl_mtx(MTX1) ... (B-3)
326 * // ‚FTASK4¨TASK1¨TASK5CMTX2FTASK1
327 * get_pri(TSK_SELF, &tskpri)
328 * assert(tskpri == HIGH_PRIORITY)
329 * 44: ena_dsp()
330 * == TASK4i‘±‚«j==
331 * 45: slp_tsk()
332 * // ‚FTASK1¨TASK5CMTX2FTASK1
333 * == TASK1i‘±‚«j==
334 * 46: slp_tsk()
335 * // ‚FTASK5CMTX2FTASK1
336 * == TASK5i‘±‚«j==
337 * 47: wup_tsk(TASK1)
338 * // ‚FTASK5¨TASK1CMTX2FTASK1
339 * 48: slp_tsk()
340 * // ‚FTASK1CMTX2FTASK1
341 *
342 * == TASK1i‘±‚«j==
343 * 49: wup_tsk(TASK2)
344 * wup_tsk(TASK3)
345 * slp_tsk()
346 * // ’†FTASK2¨TASK3CMTX2FTASK1
347 * == TASK2i‘±‚«j==
348 * 50: loc_mtx(MTX2)
349 * // ’†FTASK3CMTX2FTASK1¨TASK2
350 * == TASK3i‘±‚«j==
351 * 51: wup_tsk(TASK1)
352 * // ‚FTASK1C’†FTASK3CMTX2FTASK1¨TASK2
353 * == TASK1i‘±‚«j==
354 * 52: loc_mtx(MTX3)
355 * // ‚FTASK1C’†FTASK3CMTX2FTASK1¨TASK2CMTX3FTASK1
356 * 53: unl_mtx(MTX2) ... (C-1)
357 * // ‚FTASK1¨TASK2C’†FTASK3CMTX2FTASK2CMTX3FTASK1
358 * get_pri(TASK2, &tskpri)
359 * assert(tskpri == HIGH_PRIORITY)
360 * 54: loc_mtx(MTX1)
361 * // ‚FTASK1¨TASK2C’†FTASK3CMTX1FTASK1CMTX2FTASK2CMTX3FTASK1
362 * 55: slp_tsk()
363 * // ‚FTASK2C’†FTASK3CMTX1FTASK1CMTX2FTASK2CMTX3FTASK1
364 *
365 * == TASK2i‘±‚«j==
366 * 56: wup_tsk(TASK1)
367 * // ‚FTASK2¨TASK1C’†FTASK3CMTX1FTASK1CMTX2FTASK2CMTX3FTASK1
368 * 57: loc_mtx(MTX1)
369 * // ‚FTASK1C’†FTASK3CMTX1FTASK1¨TASK2CMTX2FTASK2CMTX3FTASK1
370 * == TASK1i‘±‚«j==
371 * 58: unl_mtx(MTX1) ... (C-3)
372 * // ‚FTASK1¨TASK2C’†FTASK3CMTX1FTASK2CMTX2FTASK2CMTX3FTASK1
373 * get_pri(TASK2, &tskpri)
374 * assert(tskpri == HIGH_PRIORITY)
375 * 59: unl_mtx(MTX3)
376 * // ‚FTASK2C’†FTASK1¨TASK3CMTX1FTASK2CMTX2FTASK2
377 * == TASK2i‘±‚«j==
378 * 60: unl_mtx(MTX2)
379 * // ’†FTASK2¨TASK1¨TASK3CMTX1FTASK2
380 *
381 * 61: rot_rdq(MID_PRIORITY)
382 * // ’†FTASK1¨TASK3¨TASK2CMTX1FTASK2
383 * == TASK1i‘±‚«j==
384 * 62: loc_mtx(MTX1)
385 * // ’†FTASK3¨TASK2CMTX1FTASK2¨TASK1
386 * == TASK3i‘±‚«j==
387 * 63: rot_rdq(MID_PRIORITY)
388 * // ’†FTASK2¨TASK3CMTX1FTASK2¨TASK1
389 * == TASK2i‘±‚«j==
390 * 64: unl_mtx(MTX1) ... (C-2)
391 * // ’†FTASK2¨TASK3¨TASK1CMTX1FTASK1
392 * get_pri(TASK1, &tskpri)
393 * assert(tskpri == MID_PRIORITY)
394 * == TASK2i‘±‚«j==
395 * 65: ext_tsk() -> noreturn
396 * // ’†FTASK3¨TASK1CMTX1FTASK1
397 * == TASK3i‘±‚«j==
398 * 66: ext_tsk() -> noreturn
399 * // ’†FTASK1CMTX1FTASK1
400 * == TASK1i‘±‚«j==
401 * 67: END
402 */
403
404#include <kernel.h>
405#include <t_syslog.h>
406#include "syssvc/logtask.h"
407#include "kernel_cfg.h"
408#include "test_lib.h"
409#include "test_mutex4.h"
410
411extern ER bit_mutex(void);
412
413void
414task1(intptr_t exinf)
415{
416 ER ercd;
417 PRI tskpri;
418
419 set_bit_func(bit_mutex);
420
421 check_point(1);
422 ercd = dis_dsp();
423 check_ercd(ercd, E_OK);
424
425 check_point(2);
426 ercd = act_tsk(TASK2);
427 check_ercd(ercd, E_OK);
428
429 ercd = act_tsk(TASK4);
430 check_ercd(ercd, E_OK);
431
432 check_point(3);
433 ercd = ploc_mtx(MTX2);
434 check_ercd(ercd, E_OK);
435
436 ercd = get_pri(TSK_SELF, &tskpri);
437 check_ercd(ercd, E_OK);
438 check_assert(tskpri == HIGH_PRIORITY);
439
440 check_point(4);
441 ercd = ena_dsp();
442 check_ercd(ercd, E_OK);
443
444 check_point(5);
445 ercd = unl_mtx(MTX2);
446 check_ercd(ercd, E_OK);
447
448 check_point(8);
449 ercd = get_pri(TSK_SELF, &tskpri);
450 check_ercd(ercd, E_OK);
451 check_assert(tskpri == MID_PRIORITY);
452
453 check_point(9);
454 ercd = dis_dsp();
455 check_ercd(ercd, E_OK);
456
457 check_point(10);
458 ercd = rot_rdq(MID_PRIORITY);
459 check_ercd(ercd, E_OK);
460
461 check_point(11);
462 ercd = act_tsk(TASK3);
463 check_ercd(ercd, E_OK);
464
465 check_point(12);
466 ercd = ploc_mtx(MTX1);
467 check_ercd(ercd, E_OK);
468
469 ercd = get_pri(TSK_SELF, &tskpri);
470 check_ercd(ercd, E_OK);
471 check_assert(tskpri == MID_PRIORITY);
472
473 check_point(13);
474 ercd = ena_dsp();
475 check_ercd(ercd, E_OK);
476
477 check_point(15);
478 ercd = slp_tsk();
479 check_ercd(ercd, E_OK);
480
481 check_point(18);
482 ercd = wup_tsk(TASK2);
483 check_ercd(ercd, E_OK);
484
485 check_point(19);
486 ercd = dis_dsp();
487 check_ercd(ercd, E_OK);
488
489 check_point(20);
490 ercd = rot_rdq(MID_PRIORITY);
491 check_ercd(ercd, E_OK);
492
493 check_point(21);
494 ercd = wup_tsk(TASK3);
495 check_ercd(ercd, E_OK);
496
497 check_point(22);
498 ercd = unl_mtx(MTX1);
499 check_ercd(ercd, E_OK);
500
501 ercd = get_pri(TSK_SELF, &tskpri);
502 check_ercd(ercd, E_OK);
503 check_assert(tskpri == MID_PRIORITY);
504
505 check_point(23);
506 ercd = ena_dsp();
507 check_ercd(ercd, E_OK);
508
509 check_point(25);
510 ercd = slp_tsk();
511 check_ercd(ercd, E_OK);
512
513 check_point(28);
514 ercd = dis_dsp();
515 check_ercd(ercd, E_OK);
516
517 check_point(29);
518 ercd = wup_tsk(TASK4);
519 check_ercd(ercd, E_OK);
520
521 check_point(30);
522 ercd = ploc_mtx(MTX2);
523 check_ercd(ercd, E_OK);
524
525 check_point(31);
526 ercd = rot_rdq(HIGH_PRIORITY);
527 check_ercd(ercd, E_OK);
528
529 check_point(32);
530 ercd = act_tsk(TASK5);
531 check_ercd(ercd, E_OK);
532
533 check_point(33);
534 ercd = ploc_mtx(MTX1);
535 check_ercd(ercd, E_OK);
536
537 ercd = get_pri(TSK_SELF, &tskpri);
538 check_ercd(ercd, E_OK);
539 check_assert(tskpri == HIGH_PRIORITY);
540
541 check_point(34);
542 ercd = ena_dsp();
543 check_ercd(ercd, E_OK);
544
545 check_point(36);
546 ercd = slp_tsk();
547 check_ercd(ercd, E_OK);
548
549 check_point(39);
550 ercd = dis_dsp();
551 check_ercd(ercd, E_OK);
552
553 check_point(40);
554 ercd = wup_tsk(TASK4);
555 check_ercd(ercd, E_OK);
556
557 check_point(41);
558 ercd = rot_rdq(HIGH_PRIORITY);
559 check_ercd(ercd, E_OK);
560
561 check_point(42);
562 ercd = wup_tsk(TASK5);
563 check_ercd(ercd, E_OK);
564
565 check_point(43);
566 ercd = unl_mtx(MTX1);
567 check_ercd(ercd, E_OK);
568
569 ercd = get_pri(TSK_SELF, &tskpri);
570 check_ercd(ercd, E_OK);
571 check_assert(tskpri == HIGH_PRIORITY);
572
573 check_point(44);
574 ercd = ena_dsp();
575 check_ercd(ercd, E_OK);
576
577 check_point(46);
578 ercd = slp_tsk();
579 check_ercd(ercd, E_OK);
580
581 check_point(49);
582 ercd = wup_tsk(TASK2);
583 check_ercd(ercd, E_OK);
584
585 ercd = wup_tsk(TASK3);
586 check_ercd(ercd, E_OK);
587
588 ercd = slp_tsk();
589 check_ercd(ercd, E_OK);
590
591 check_point(52);
592 ercd = loc_mtx(MTX3);
593 check_ercd(ercd, E_OK);
594
595 check_point(53);
596 ercd = unl_mtx(MTX2);
597 check_ercd(ercd, E_OK);
598
599 ercd = get_pri(TASK2, &tskpri);
600 check_ercd(ercd, E_OK);
601 check_assert(tskpri == HIGH_PRIORITY);
602
603 check_point(54);
604 ercd = loc_mtx(MTX1);
605 check_ercd(ercd, E_OK);
606
607 check_point(55);
608 ercd = slp_tsk();
609 check_ercd(ercd, E_OK);
610
611 check_point(58);
612 ercd = unl_mtx(MTX1);
613 check_ercd(ercd, E_OK);
614
615 ercd = get_pri(TASK2, &tskpri);
616 check_ercd(ercd, E_OK);
617 check_assert(tskpri == HIGH_PRIORITY);
618
619 check_point(59);
620 ercd = unl_mtx(MTX3);
621 check_ercd(ercd, E_OK);
622
623 check_point(62);
624 ercd = loc_mtx(MTX1);
625 check_ercd(ercd, E_OK);
626
627 check_finish(67);
628
629 check_point(0);
630}
631
632void
633task2(intptr_t exinf)
634{
635 ER ercd;
636 PRI tskpri;
637
638 check_point(14);
639 ercd = slp_tsk();
640 check_ercd(ercd, E_OK);
641
642 check_point(24);
643 ercd = slp_tsk();
644 check_ercd(ercd, E_OK);
645
646 check_point(50);
647 ercd = loc_mtx(MTX2);
648 check_ercd(ercd, E_OK);
649
650 check_point(56);
651 ercd = wup_tsk(TASK1);
652 check_ercd(ercd, E_OK);
653
654 check_point(57);
655 ercd = loc_mtx(MTX1);
656 check_ercd(ercd, E_OK);
657
658 check_point(60);
659 ercd = unl_mtx(MTX2);
660 check_ercd(ercd, E_OK);
661
662 check_point(61);
663 ercd = rot_rdq(MID_PRIORITY);
664 check_ercd(ercd, E_OK);
665
666 check_point(64);
667 ercd = unl_mtx(MTX1);
668 check_ercd(ercd, E_OK);
669
670 ercd = get_pri(TASK1, &tskpri);
671 check_ercd(ercd, E_OK);
672 check_assert(tskpri == MID_PRIORITY);
673
674 check_point(65);
675 ercd = ext_tsk();
676
677 check_point(0);
678}
679
680void
681task3(intptr_t exinf)
682{
683 ER ercd;
684
685 check_point(16);
686 ercd = wup_tsk(TASK1);
687 check_ercd(ercd, E_OK);
688
689 check_point(17);
690 ercd = slp_tsk();
691 check_ercd(ercd, E_OK);
692
693 check_point(26);
694 ercd = wup_tsk(TASK1);
695 check_ercd(ercd, E_OK);
696
697 check_point(27);
698 ercd = slp_tsk();
699 check_ercd(ercd, E_OK);
700
701 check_point(51);
702 ercd = wup_tsk(TASK1);
703 check_ercd(ercd, E_OK);
704
705 check_point(63);
706 ercd = rot_rdq(MID_PRIORITY);
707 check_ercd(ercd, E_OK);
708
709 check_point(66);
710 ercd = ext_tsk();
711
712 check_point(0);
713}
714
715void
716task4(intptr_t exinf)
717{
718 ER ercd;
719
720 check_point(6);
721 ercd = loc_mtx(MTX1);
722 check_ercd(ercd, E_ILUSE);
723
724 check_point(7);
725 ercd = slp_tsk();
726 check_ercd(ercd, E_OK);
727
728 check_point(35);
729 ercd = slp_tsk();
730 check_ercd(ercd, E_OK);
731
732 check_point(45);
733 ercd = slp_tsk();
734 check_ercd(ercd, E_OK);
735
736 check_point(0);
737}
738
739void
740task5(intptr_t exinf)
741{
742 ER ercd;
743
744 check_point(37);
745 ercd = wup_tsk(TASK1);
746 check_ercd(ercd, E_OK);
747
748 check_point(38);
749 ercd = slp_tsk();
750 check_ercd(ercd, E_OK);
751
752 check_point(47);
753 ercd = wup_tsk(TASK1);
754 check_ercd(ercd, E_OK);
755
756 check_point(48);
757 ercd = slp_tsk();
758 check_ercd(ercd, E_OK);
759
760 check_point(0);
761}
Note: See TracBrowser for help on using the repository browser.